3

我有一个我们开发的产品,我们只是在 Windows 8 和 Server 2012 上进行测试。问题是,在 Win 8 / 2012 上安装完成后,兼容性垫片(据我目前了解)弹出出现一个对话,说该应用程序需要 .Net 3.5 才能正常运行。请看下面的截图:

.net 所需的对话

由于我们的产品是本机打印机驱动程序,我认为这不太可能!Win 8 / 2012 的唯一先决条件是 Visual c++ 可重新分发的版本。

如果有帮助,我还使用 install shield 2010 创建安装程序。

有没有其他人看到 Win 8 错误地提示应用程序需要 .net 3.5?有谁知道定义兼容性垫片如何确定应用程序是否需要 .net 3.5 的任何可靠来源?

谢谢!

安迪

** 更新 **

找到这篇 msdn 博客文章:http: //blogs.technet.com/b/askcore/archive/2012/05/14/windows-8-and-net-framework-3-5.aspx。简而言之,可以通过以下方式触发对话:

  • 您尝试使用可从 Microsoft 下载的可再发行包安装 .Net 2.0、3.0 或 3.5。
  • 应用程序尝试在其自己的安装过程中安装所需版本的可再发行包之一。
  • 需要旧版本的应用程序无需预安装所需版本即可执行。

不幸的是,这些似乎都不能解释为什么我会看到它!

** 更新 **

明确地说,我没有托管库或 exe,只有纯原生 c 和 c++,一些使用 Visual Studio 编译器(没有 clr 标志)构建,一些使用 DDK。

... 多么尴尬!...

4

3 回答 3

1

我认为您正在查看误报。这是您链接的博客中的另一句话:

经典的“您的里程可能会有所不同”免责声明在这里适用,因为我们真的不知道所有应用程序将如何对拦截安装尝试的垫片作出反应。此外,一些应用程序会查找某些文件的存在以验证所需 .Net 版本的安装。如果预装了 .Net 3.5,此类应用程序安装可能会失败,因为旧版本中以前存在的一些文件在 Windows 8 中已被弃用。然而,我们正在测试许多常用应用程序,并且在某些情况下会引入应用程序前填充程序(如果它们检测到 . NET 不当。

为避免需要它的应用程序出现问题,最好在安装应用程序之前启用新的 .Net 3.5 功能。

翻译:这是一个完整的黑客。

于 2013-02-15T02:14:01.743 回答
1

我对“失败”安装触发的 PCA 消息更有经验。对于那些您绝对可以通过编辑InstallShield\support 文件夹中名为(level is or or ) 的模板应用程序清单来使事情变得更好,在这些情况下,您可以为您声称支持的每个其他操作系统添加一个元素 - 例如通过添加for视窗 8。setupexe.<level>.manifestinvokerhighestadminsupportedOS<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>

可能值得从它开始看看它是否有助于 .NET 检测案例。我不会屏住呼吸,但这将有助于解决有人在完成安装之前点击取消的情况。

(请注意,对于我们在给定目标操作系统上测试过的代码,您应该升级到实际测试过的 InstallShield 版本,但在许多情况下,复制正确的supportedOS元素就足够了。)

于 2013-02-15T13:24:43.270 回答
0

嗯,这有点尴尬……

...原来有一个用 CLR 2 编译的 .net 库,它在安装程序内的一些 InstallScript 中运行。(在我的辩护中,安装程序相当大!!)

因此,对于任何认为这真的是一个谜的人表示歉意,对话有点正确!此外,向第一次猜对并随后删除他的帖子的人道歉。它在这个主题上提供了很多信息。随时重新添加它,我会标记为答案!:)

安迪。

于 2013-02-15T16:25:56.223 回答