199 lines
7.1 KiB
C#
199 lines
7.1 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Text;
|
||
using System.Windows;
|
||
|
||
using WixSharp;
|
||
using WixSharp.CommonTasks;
|
||
|
||
using WixToolset.Dtf.WindowsInstaller;
|
||
|
||
namespace Sai.RvKits_Setup
|
||
{
|
||
public class Program
|
||
{
|
||
static void Main()
|
||
{
|
||
var baseFeature = new Feature("必要组件", "加载插件的必须组件") { Display = FeatureDisplay.hidden };
|
||
var revit2018 = new Feature("Revit2018", "Revit2018的功能描述", true);
|
||
//var revit2019 = new Feature("Revit2019", "Revit2019的功能描述") { IsEnabled = false };
|
||
var revit2020 = new Feature("Revit2020", "Revit2020的功能描述", true);
|
||
//var pluginsFolder = @"%CommonAppDataFolder%\Autodesk\ApplicationPlugins\Sai.RvKits.bundle";
|
||
var pluginsFolder =
|
||
$@"{Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)}\Autodesk\ApplicationPlugins\{Settings.AddInAppName}.bundle";
|
||
//var project = new ManagedProject("建模工具集",
|
||
// new Dir(@"%ProgramFiles%\Sai\Sai.RvKits",
|
||
// new File("Program.cs"), new Files(@"..\Sai.RvKit\bin\Debug\*.*")));
|
||
var project = new ManagedProject(
|
||
"建模工具集",
|
||
new WixEntity[]
|
||
{
|
||
//new Dir(@"%ProgramFiles%\Sai.RvKit"),
|
||
new Dir(baseFeature, pluginsFolder, new File($@"..\bin\{Settings.AddInAppName}.bundle\PackageContents.xml")),
|
||
new Dir(
|
||
new Id("R18"),
|
||
$@"{pluginsFolder}\Contents\2018",
|
||
new WixEntity[]
|
||
{
|
||
new Files(revit2018, @"..\bin\Debug\2018\*.*") /*, new File(revit2018, @"..\bin\Debug\2018\Sai.RvKits.addin")*/
|
||
}
|
||
),
|
||
//new Dir($"{pluginsFolder}\\Contents\\2019", new WixEntity[] { new Files(revit2019, @"..\bin\Debug\2019\*.*"), new File(revit2019, @"..\bin\Sai.RvKits.addin") }),
|
||
new Dir(
|
||
new Id("R20"),
|
||
$@"{pluginsFolder}\Contents\2020",
|
||
new WixEntity[]
|
||
{
|
||
new Files(revit2020, @"..\bin\Debug\2020\*.*") /*, new File(revit2020, @"..\bin\Debug\2020\Sai.RvKits.addin")*/
|
||
}
|
||
)
|
||
}
|
||
)
|
||
{
|
||
UI = WUI.WixUI_Minimal,
|
||
//GUID = new Guid("6fe30b47-2577-43ad-9095-1861ba25889b"),
|
||
GUID = new Guid("0EB16058-1682-4620-BD5A-BD777BFD4934"),
|
||
Language = "zh-cn",
|
||
Version = new Version(1, 0, 0, 0),
|
||
LocalizationFile = "WixUI_zh-CN.wxl",
|
||
//Feature = baseFeature,
|
||
DefaultFeature = revit2018,
|
||
// all stock UI dialogs
|
||
//ManagedUI = ManagedUI.DefaultWpf,
|
||
//MSI包名称
|
||
//project.OutFileName = "软件名称" + $"{DateTime.Now.Year}{DateTime.Now.Month:00}{DateTime.Now.Day:00}{DateTime.Now.Hour:00}{DateTime.Now.Minute:00}";
|
||
//custom set of UI WPF dialogs
|
||
ManagedUI = new ManagedUI(),
|
||
ValidateBackgroundImage = false, //关闭背景图片大小验证
|
||
BackgroundImage = @"Images\dlgbmp.png", //建议宽度156,高度312
|
||
BannerImage = @"Images\bannerbmp.png",
|
||
//安装新版本时自动卸载旧版本
|
||
UpgradeCode = new Guid("511EED44-E344-4821-BF25-B42175CE41AC"),
|
||
MajorUpgrade = new MajorUpgrade
|
||
{
|
||
AllowSameVersionUpgrades = true,
|
||
DowngradeErrorMessage = "当前安装的版本低于已安装的版,无法再次安装。",
|
||
AllowDowngrades = false,
|
||
Schedule = UpgradeSchedule.afterInstallValidate
|
||
}
|
||
};
|
||
project.OutFileName = $"建模工具集{project.Version}";
|
||
project.Package.AttributesDefinition = "Platform=x64";
|
||
project.ManagedUI.Icon = @"Images\Revit2021x.ico"; //标题栏图标
|
||
//设置控制面板制造商名称
|
||
project.ControlPanelInfo.Manufacturer = "Sai";
|
||
//设置控制面板图标
|
||
project.ControlPanelInfo.ProductIcon = @"Images\Revit2021x.ico";
|
||
|
||
//project.SourceBaseDir = "<input dir path>";
|
||
//project.OutDir = "<output dir path>";
|
||
|
||
|
||
project.SetNetFxPrerequisite(WixSharp.Condition.Net48_Installed, "请先安装.netFrameworks4.8");
|
||
|
||
project.ManagedUI.InstallDialogs
|
||
.Add<Sai.RvKits_Setup.WelcomeDialog>()
|
||
.Add<Sai.RvKits_Setup.LicenceDialog>()
|
||
.Add<Sai.RvKits_Setup.FeaturesDialog>()
|
||
.Add<Sai.RvKits_Setup.InstallDirDialog>()
|
||
.Add<Sai.RvKits_Setup.ProgressDialog>()
|
||
.Add<Sai.RvKits_Setup.ExitDialog>();
|
||
|
||
project.ManagedUI.ModifyDialogs
|
||
.Add<Sai.RvKits_Setup.MaintenanceTypeDialog>()
|
||
.Add<Sai.RvKits_Setup.FeaturesDialog>()
|
||
.Add<Sai.RvKits_Setup.ProgressDialog>()
|
||
.Add<Sai.RvKits_Setup.ExitDialog>();
|
||
|
||
//project.AddAction()
|
||
project.Load += Project_Load;
|
||
project.BeforeInstall += Project_BeforeInstall;
|
||
project.AfterInstall += Project_AfterInstall;
|
||
|
||
project.BuildMsi();
|
||
}
|
||
|
||
private static void Project_AfterInstall(SetupEventArgs e)
|
||
{
|
||
if (!e.IsUISupressed && !e.IsUninstalling)
|
||
MessageBox.Show(e.ToString(), "AfterExecute");
|
||
}
|
||
|
||
private static void Project_BeforeInstall(SetupEventArgs e)
|
||
{
|
||
if (!e.IsUISupressed && !e.IsUninstalling)
|
||
MessageBox.Show(e.ToString(), "BeforeInstall");
|
||
}
|
||
|
||
private static void Project_Load(SetupEventArgs e)
|
||
{
|
||
if (!e.IsUISupressed && !e.IsUninstalling)
|
||
MessageBox.Show(e.ToString(), "Load");
|
||
}
|
||
|
||
[CustomAction]
|
||
public static ActionResult Installer(Session session)
|
||
{
|
||
session.Log("Begin Installer");
|
||
//MessageBox.Show("rundll32.exe");
|
||
var manufacturer = session["Manufacturer"];
|
||
var productName = session["ProductName"];
|
||
var appDir = session["APPDIR"]; //安装路径,根据用户选择
|
||
var sourceDir = session["SourceDir"]; //安装包解压路径
|
||
var programFiles64Folder = session["ProgramFiles64Folder"]; //64位安装路径,C:\ProgramFiles
|
||
var commonAppDataFolder = session["CommonAppDataFolder"]; //C:\ProgramData
|
||
var addInFilePath = $"{commonAppDataFolder}\\Autodesk\\{Settings.AddInFileName}.bundle\\Contents";
|
||
//List<RevitProduct> revitProductsInstalled = RevitProductUtility.GetAllInstalledRevitProducts();
|
||
//foreach (var product in revitProductsInstalled)
|
||
//{
|
||
//}
|
||
var fileInfos = new List<System.IO.FileInfo>();
|
||
var dir = System.IO.Directory.CreateDirectory(appDir);
|
||
//var sb = new StringBuilder();
|
||
foreach (var fileInfo in dir.GetFiles("*", System.IO.SearchOption.AllDirectories))
|
||
{
|
||
//var match = Regex.Match(filePath.Name, @"Sai\.RvKit\.dll$");
|
||
//if (!match.Success)
|
||
//{
|
||
// match = Regex.Match(filePath.Name, @"(\d\d\d\d)\.exe$");
|
||
|
||
// if (!match.Success)
|
||
// continue;
|
||
//}
|
||
//if (match.Success)
|
||
//{
|
||
// dlls.Add(filePath.FullName);
|
||
//}
|
||
if (fileInfo.Name == Settings.DllFileName)
|
||
{
|
||
fileInfos.Add(fileInfo);
|
||
}
|
||
}
|
||
|
||
foreach (var dllPath in fileInfos)
|
||
{
|
||
var versionNum = dllPath.Directory?.Name;
|
||
var manager = new AddInManager(versionNum, Settings.AddInFileName);
|
||
foreach (var fullName in Settings.RibbonFullClassNames)
|
||
{
|
||
manager.CreateApplication(Settings.AddInAppName, dllPath.FullName, fullName);
|
||
}
|
||
manager.Uninstall();
|
||
manager.Install();
|
||
}
|
||
|
||
return ActionResult.Success;
|
||
}
|
||
|
||
[CustomAction]
|
||
public static ActionResult Uninstaller(Session session)
|
||
{
|
||
session.Log("Begin Uninstaller");
|
||
var commonAppDataFolder = session["CommonAppDataFolder"];
|
||
var addInFilePath = $"{commonAppDataFolder}\\Autodesk\\{Settings.AddInAppName}.bundle";
|
||
System.IO.Directory.Delete(addInFilePath, true);
|
||
return ActionResult.Success;
|
||
}
|
||
}
|
||
}
|