检查防火墙状态的WiX自定义操作会导致安装程序失败

时间:2011-02-11 11:15:24

标签: c# wix

我已在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防火墙扩展,但如果有人知道它为什么不起作用,那就太好了。

1 个答案:

答案 0 :(得分:0)

没有足够的信息可以确定。然而,我的魔法八球猜测你试图激活一个类的组件是不可用的。最好的方法是在代码上获得调试器并查看异常。如果您在执行此操作时遇到问题,捕获异常并将其写入日志文件可能也很有用。

我也同意严的上述评论。我建议在WiX中使用内置的防火墙支持,而不是在可能的情况下编写自己的代码。