我有一个 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/