c# - MSI 日志调试日志接收器

标签 c# windows-installer installshield

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

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

最佳答案

只有通过托管自定义操作才有可能,并且需要使用 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 未经过数字签名,因此包含您的托管自定义操作的程序集也必须未签名。

关于c# - MSI 日志调试日志接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1483701/

相关文章:

exception - Installshield:EnumServicesStatus 抛出异常问题

c# - .net core2 Data isn't null 但 View Keep saying Data is Null

c# - 为什么 Assembly.GetTypes() 不会返回封闭泛型类型?

c# - Mutex.waitOne 在特定机器上总是返回 False

powershell - 从 Powershell 执行远程安静 MSI 安装

visual-studio-2012 - Visual Studio - 使用 System.Data.SQLite 在项目中安装 InstallShield

c# - 如何编写控制外部cmd的c#

.net - 创建静默安装程序

python - 如何将python+pygame程序打包为可执行文件?

windows - 在 VBS 中获取 Common Documents 文件夹