3

我有一个我编写的应用程序的 MSI 安装程序。安装程序在 Windows 7 上运行良好。我决定今天在 Windows 8 上对其进行冒烟测试,但它在 WMI 查询中爆炸。我的下意识反应是我的 WMI 查询出了点问题,但经过几个小时的挖掘(并发现其他错误),我开始认为存在与我的代码无关的系统性问题。

我发现的具体例子是:

  • WMI 查询失败。我试图查询一个特定的命名空间。我比较了我的 Windows 7 和 8 机器之间命名空间的安全权限,它们是相同的。如果我将“INTERACTIVE”添加到 WMI 命名空间 ACL(它最初只有 SYSTEM 和管理员),我能够让查询在 8 台机器上运行,这导致我找到下一个问题......
  • 未能在 LOCAL_MACHINE 中打开注册表项。我注释掉了使用密钥的块,这导致我进入下一个问题......
  • 无法在“程序文件”中打开文件

我做了什么:

  • UAC 一开始是完全关闭的,但我已经打开它(完全启动,通知我一切)。
  • 修改了 WMI 命名空间的 ACL
  • 尝试在 WMI 查询中使用模拟

我错过了 Windows 8 的一些技巧吗?

(代码是 C#,.NET 4.0)

4

2 回答 2

1

Windows 8 与 Windows 7/Vista 的不同之处在于它处理 UAC 被关闭的方式。在 7/Vista 中,程序被赋予高完整性级别,而在 8 程序中被赋予中等完整性级别。

资料来源:http ://www.brianbondy.com/blog/id/140/

于 2012-11-05T15:51:35.543 回答
0

你真的没有给我太多的工作,所以我将根据我在 Windows 8 上看到的其他安装程序的故障做出很多假设并冒险出去。

确保您在 Windows 8 上拥有与 Windows 7 相同版本的 .NET。进入并安装 .NET 3.5 / 4.0 和 4.5。

我见过几个安装程序(一个是 TFS Power Tools),它们使用 InstallUtil 编写托管代码自定义操作,这些操作绑定到框架的一个版本,并在您只有 .NET 4.5 时抛出错误。

对此的修复当然是改用 Wix/DTF 自定义操作,并使用 CustomAction.Config 来指定支持的运行时并允许旧版激活策略。

于 2012-11-03T01:37:33.743 回答