MSI日志调试日志接收器

时间:2009-09-27 14:38:50

标签: c# windows-installer installshield

我有一个InstallShield MSI项目。当我将一个MSIHANDLE从InstallScript自定义操作传递到通过DotNetCoCreateObject()初始化的托管程序集时,我的托管代码中收到的值为-2。

是否有人知道是否可以从通过DotNetCoCreateObject()调用托管代码的InstallScript自定义操作访问MSIHANDLE?我想将自定义操作结果记录到与安装其余部分相同的日志文件中。我使用的是InstallShield 2010,Windows Install 4.5和.Net 3.5。

3 个答案:

答案 0 :(得分:4)

只能通过托管自定义操作,并且需要使用InstallShield的InstallShield.Interop.Msi.dll来获取实际句柄。

要从托管自定义操作写入MSI日志文件,这可以:

 using (Msi.Install msi = Msi.CustomActionHandle(_msiHandle))
 {
     using (Msi.Record record = new Msi.Record(100))
     {
         record.SetString(0, "LOG: [1]");
         record.SetString(1, entry.Message);
         msi.ProcessMessage(Msi.InstallMessage.Info, record);
     }
 }

注意:自IS2010起,InstallShield.Interop.Msi.dll未经过数字签名,因此包含自定义操作的程序集也必须是未签名的。

答案 1 :(得分:0)

不,这是不可能的。您必须自己管理日志输出。

答案 2 :(得分:0)

另一个澄清是IS有两种项目类型,InstallScript& MSI。您只能访问MSI项目中的MSI句柄。