4

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

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

4

3 回答 3

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 未进行数字签名,因此具有托管自定义操作的程序集也必须未签名。

于 2010-05-03T16:17:21.627 回答
0

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

于 2009-12-11T18:44:56.173 回答
0

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

于 2009-12-12T20:57:04.543 回答