我有一个我们开发的产品,我们只是在Windows 8和Server 2012上进行测试。问题是,在Win 8/2012安装完成后,出现了兼容性垫片(据我所知)远程)弹出一个对话,说应用程序需要.Net 3.5才能正常运行。请参见下面的屏幕截图:
由于我们的产品是原生打印机驱动程序,因此我发现这种可能性极小!它只是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。简而言之,该对话框可以通过以下方式触发:
不幸的是,这似乎都不能解释为什么我会看到它!
**更新**
只是为了明确,我没有托管库或exes,只有纯本机c和c ++,有些是用visual studio编译器构建的(没有clr标志),有些是用DDK构建的。
......多么尴尬!...
答案 0 :(得分:1)
我认为你正在看一个误报。这是您链接的博客的另一个引用:
经典的“您的里程可能会有所不同”免责声明适用于此,因为我们 真的不知道所有应用程序将如何对垫片做出反应 拦截安装尝试。此外,一些应用程序寻找 存在某些文件以验证所需的安装 .Net版。如果.Net 3.5是这样的应用程序安装可能会失败 预装,因为以前存在于旧版本中的某些文件 Windows 8中已弃用这些版本。但我们正在测试 许多常用的应用程序,并在某些情况下引入预应用程序垫片 如果他们不恰当地检测.NET。
为了避免需要它的应用程序出现问题,最好启用它 安装应用程序之前的新.Net 3.5功能。
翻译:这是一个完整的黑客攻击。
答案 1 :(得分:1)
我对使用“失败”安装时触发的PCA消息更有经验。对于那些您可以通过编辑名为setupexe.<level>.manifest
的InstallShield \ support文件夹中的模板app manifests(级别为invoker
或highest
或admin
)来确保更好的方法,在这些情况下,您为声称支持的每个其他操作系统添加supportedOS
元素 - 例如为Windows 8添加<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
。
值得一提的是,看看它是否有助于.NET检测案例。我不会屏住呼吸,但它会帮助完成安装之前有人点击取消的情况。
(请注意,对于我们在给定目标操作系统上测试过的代码,您应该升级到在那里实际测试的InstallShield版本,但在许多情况下,复制正确的supportedOS
元素就足够了。)
答案 2 :(得分:0)
嗯,这有点令人尴尬......
...原来有一个用CLR 2编译的.net库,它在安装程序内部的某些InstallScript中运行。 (在我的辩护中,安装程序相当大!!)
对于任何认为这真的是个谜的人都道歉,对话是对的!此外,向第一次猜对了,并且已经删除了他的帖子的人道歉。这个主题非常有用。随意再添加它,我会标记为答案! :)
安迪。