为什么Windows 8兼容性错误检测到安装后需要.Net 3.5?

时间:2013-02-14 13:52:57

标签: .net windows-8 driver installshield installshield-2010

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

.net required dialogue

由于我们的产品是原生打印机驱动程序,因此我发现这种可能性极小!它只是Win 8/2012的先决条件,是可视化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。
  • 应用程序尝试在自己的安装过程中为所需版本安装一个可再发行程序包。
  • 需要旧版本的应用程序,无需预先安装所需版本即可执行。

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

**更新**

只是为了明确,我没有托管库或exes,只有纯本机c和c ++,有些是用visual studio编译器构建的(没有clr标志),有些是用DDK构建的。

......多么尴尬!...

3 个答案:

答案 0 :(得分:1)

我认为你正在看一个误报。这是您链接的博客的另一个引用:

  

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

     

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

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

答案 1 :(得分:1)

我对使用“失败”安装时触发的PCA消息更有经验。对于那些您可以通过编辑名为setupexe.<level>.manifest的InstallShield \ support文件夹中的模板app manifests(级别为invokerhighestadmin)来确保更好的方法,在这些情况下,您为声称支持的每个其他操作系统添加supportedOS元素 - 例如为Windows 8添加<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>

值得一提的是,看看它是否有助于.NET检测案例。我不会屏住呼吸,但它会帮助完成安装之前有人点击取消的情况。

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

答案 2 :(得分:0)

嗯,这有点令人尴尬......

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

对于任何认为这真的是个谜的人都道歉,对话是对的!此外,向第一次猜对了,并且已经删除了他的帖子的人道歉。这个主题非常有用。随意再添加它,我会标记为答案! :)

安迪。