我有一个扩展System.Configuration.Install.Installer,它在我们的应用程序的安装时间运行。我需要访问MSI文件中设置的一些属性(例如INSTALLDIR,以及我需要检索的其他一些路径)。有没有办法从帮助程序集中访问MSI属性?
值得注意的是,我们的安装程序是使用WiX 3.5构建的。
提前感谢您提供任何帮助。
编辑这是我们班上的当前代码。
[RunInstaller(true)]
public class MxServeInstaller : Installer
{
private ServiceInstaller myServiceInstaller;
private ServiceProcessInstaller myServiceProcessInstaller;
public MyProductInstaller()
{
this.myServiceInstaller = new ServiceInstaller();
this.myServiceInstaller.StartType = ServiceStartMode.Automatic;
this.myServiceInstaller.ServiceName = MyProduct.SERVICE_NAME;
this.myServiceInstaller.Description = "Provides software copy protection and token pool management services for the Mx-Suite from Company";
this.myServiceInstaller.ServicesDependedOn = new string[] { "Crypkey License" };
Installers.Add(this.myServiceInstaller);
this.myServiceProcessInstaller = new ServiceProcessInstaller();
this.myServiceProcessInstaller.Account = ServiceAccount.LocalSystem;
Installers.Add(this.myServiceProcessInstaller);
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
ServiceController controller = new ServiceController(MyProduct.SERVICE_NAME);
try
{
controller.Start();
}
catch( Exception ex )
{
string source = "My-Product Installer";
string log = "Application";
if (!EventLog.SourceExists(source))
EventLog.CreateEventSource(source, log);
EventLog eventLog = new EventLog();
eventLog.Source = source;
eventLog.WriteEntry(string.Format("Failed to start My-Product!{1}", ex.Message), EventLogEntryType.Error);
}
}
}
我计划添加的是AfterInstall的一个阶段,它至少需要知道安装程序中设置的INSTALLDIR属性。
答案 0 :(得分:1)
安装程序类自定义操作不在进程中,并且无法直接访问MSI句柄以及任何相关的函数,如获取/设置属性和日志记录。
解决方案是使用Windows Installer XML部署工具基础自定义操作(google WiX DTF)。对于托管代码自定义操作,这是一个更好的模式,只需更改托管模型并为您提供一个能够与MSI通信的Session类。然后你的其余代码应该适合这个框。
但是,更多要点....我在自定义操作中看不到任何实际需要自定义操作的内容。您真正的问题是Visual Studio部署项目隐藏了MSI内置的创建和启动Windows服务的能力。
请参阅这些博客文章,了解如何创建使用EventSource扩展和ServiceInstall / ServiceControl元素的WiX合并模块,以完成所有这些工作,而无需任何自定义操作。这将创建一个合并模块,然后可以将其添加到Visual Studio部署项目中。
Redemption of Visual Studio Deployment Projects
Augmenting InstallShield using Windows Installer XML - Certificates
最后为什么这样做非常重要:
Zataoca: Custom actions are (generally) an admission of failure.