我有一个InstallShield MSI项目。当我将一个MSIHANDLE从InstallScript自定义操作传递到通过DotNetCoCreateObject()初始化的托管程序集时,我的托管代码中收到的值为-2。
是否有人知道是否可以从通过DotNetCoCreateObject()调用托管代码的InstallScript自定义操作访问MSIHANDLE?我想将自定义操作结果记录到与安装其余部分相同的日志文件中。我使用的是InstallShield 2010,Windows Install 4.5和.Net 3.5。
答案 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句柄。