我已在C#中实施了WiX自定义操作,以检查Windows防火墙是打开还是关闭。
我使用C#控制台应用程序测试了代码,它没有问题。
但是,当我在WiX自定义操作中使用代码时,它会导致安装程序在运行时失败,并在msiexec错误日志中出现以下错误:
DEBUG:错误2755:服务器返回意外错误1622尝试 nstall包MyInstaller.msi。 安装程序在安装此程序包时遇到意外错误。 这可能表明此包装存在问题。错误代码是2755。 参数是:1622,MyInstaller.msi,
动作结束11:26:30:ExecuteAction。返回值3。 行动11:26:30:FatalError。 动作开始11:26:30:FatalError。 行动11:26:30:FatalError。对话框已创建 行动结束11:26:31:FatalError。返回值2。 行动结束11:26:31:安装。返回值3。
Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", true);
INetFwMgr fwMgr = Activator.CreateInstance(NetFwMgrType) as INetFwMgr;
bool Firewallenabled = fwMgr.LocalPolicy.CurrentProfile.FirewallEnabled;
MessageBox.Show("Firewall enabled: " + Firewallenabled.ToString());
在我的WiX XML文件中,CA是这样的:
<CustomAction Id="CheckWindowsFirewallId"
BinaryKey="CustomActions.dll"
DllEntry="CheckWindowsFirewall" Execute="deferred" Impersonate="no" Return="check"/>
<InstallExecuteSequence>
<Custom Action="CheckWindowsFirewallId" After="InstallInitialize">NOT Installed</Custom>
我使用的是Visual Studio 2005,Windows XP,WiX版本3.6.1321.0
我以admininstrator身份登录。
我确切地知道哪一行导致问题。
如果我用“Activator.CreateInstance(NetFwMgrType)”注释掉该行,则不会发生错误。
我尝试了几种不同的'延迟'和'模仿'组合但没有成功。
如果我无法使用它,我将尝试使用WiX防火墙扩展,但如果有人知道它为什么不起作用,那就太好了。
答案 0 :(得分:0)
没有足够的信息可以确定。然而,我的魔法八球猜测你试图激活一个类的组件是不可用的。最好的方法是在代码上获得调试器并查看异常。如果您在执行此操作时遇到问题,捕获异常并将其写入日志文件可能也很有用。
我也同意严的上述评论。我建议在WiX中使用内置的防火墙支持,而不是在可能的情况下编写自己的代码。