【问题标题】:Why is Windows 8 Compatibility Shim Wrongly Detecting that.Net 3.5 is Required after Install?为什么 Windows 8 兼容性 Shim 错误地检测到安装后需要 .Net 3.5?
【发布时间】:2013-02-14 13:52:56
【问题描述】:

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

由于我们的产品是本机打印机驱动程序,我认为这不太可能! 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。p>

...好尴尬!...

【问题讨论】:

  • 嗯,很奇怪。使用像 Orca 这样的 MSI 检查工具来确保不是 InstallShield 触发了这个。 msdn.microsoft.com/en-us/library/windows/desktop/…
  • 如果您执行“跳过安装”,会出现什么问题? :)
  • 没什么! :) 我们不需要为我们的驱动程序安装.net!大声笑
  • @HansPassant 刚刚尝试使用 Windows 8 SDK 中的 Orca,它并没有抛出任何明显相关的东西!不过值得一试,谢谢!

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


【解决方案1】:

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

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

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

翻译:这是一个完整的 hack。

【讨论】:

  • 通常你可以使用清单来禁用垫片,我想知道在这种情况下你会做什么。
  • @Christopher Painter 我也刚找到这一段!郁闷!
  • @sixlettervariable 听起来不错!我会做一些研究看看!
【解决方案2】:

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

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

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

【讨论】:

  • 这是一个有趣的想法!如果我仍然没有得到任何地方,我会尝试一下。我想我可能已经缩小了一点!我会及时通知你的! :)
【解决方案3】:

嗯,这有点尴尬....

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

因此,对于任何认为这真的是一个谜的人表示歉意,对话有点正确!此外,向第一次猜对并随后删除他的帖子的人道歉。关于这个主题的信息非常丰富。随时再次添加它,我会标记为答案! :)

安迪。

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 2015-11-07
    • 2019-09-03
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多