【问题标题】:How to verify if the .Net Framework is already installed - InstallShield 2009?如何验证 .Net Framework 是否已安装 - InstallShield 2009?
【发布时间】:2012-04-02 00:40:24
【问题描述】:

我正在使用 InstallShield 2009,当我单击安装向导的“完成”按钮时必须启动一个可执行文件。

因此,为此,我使用了自定义操作,它工作正常,但现在,我必须在调用此自定义操作之前进行验证。我必须验证是否安装了.Net框架,如果是,则不执行如果没有安装执行。

有人可以帮忙吗?

如果有什么不清楚的地方请告诉我。

谢谢。

【问题讨论】:

  • 我忘了告诉我要找的 .net 版本是 4.0
  • 莱昂纳多,你一遍又一遍地问同一个问题,但你问错了问题。我们无法帮助您以错误的方式做事。
  • 我对 InstallShield 无能为力,所以我不会将此作为答案发布,但是我想您在注册表中具有相同的读取值的形式。此路径包含您需要的信息:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full。阅读的关键是Install,如果你得到1,那么你已经安装了NET Frameword。请记住,如果在目标机器上安装了 Client Profile,您应该检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client。见Microsoft Support
  • 但是,添加对这个键的搜索是我不知道的。如果此键退出,我需要创建一个函数以返回 true 或 false。但我不知道如何在 InstallShield 中制作它。

标签: c# .net .net-4.0 frameworks installshield


【解决方案1】:

如果固件不存在,您似乎想安装:为什么不使用先决条件?
参见例如HERE 关于该主题的另一个问题。

【讨论】:

  • 我很欣赏这个答案,但我需要像这样安装它(自定义操作)。谢谢
  • 你不知道怎么做这个验证吗?
  • 无法使用自定义操作安装 .NET 框架,因为 MSI 具有 Mutex 并且 UI 序列未提升且不应用于更改机器的配置。
  • 但是使用自定义操作可以正常安装。我现在唯一需要知道的是如何进行此验证,在脚本或系统搜索中,或其他方式。
  • InstallShield 9 不允许您将 .NET 4.0 指定为先决条件。
【解决方案2】:

您应该能够将 .NET 可再发行组件与安装程序捆绑在一起,并通过调用 LaunchAppLaunchApplication 来执行它。

作为对别人回答的评论,可以使用RegDBKeyExist函数读取注册表,看看是否已经安装了.NET。

对于注册表项,您可能需要设置此选项:

REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;

这使得注册表搜索在 64 位机器上使用 Wow64 注册表重定向。这可能是个问题。

另外,我认为默认的注册表根是 HKEY_CURRENT_USER。如果您想将其更改为 HKEY_LOCAL_MACHINE,您可以调用:

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

【讨论】:

  • 您能举例说明如何使用这个 RegDBKeyExist 函数吗?谢谢
  • 我的意思是,我可以只在脚本上使用它吗?或者我可以把它像 DoAction 事件条件一样放在按钮中吗?
  • 其实没用。 :( 即使安装了 .net 框架,RegDBKeyExist 方法也只返回 -1。它可能是什么?
  • 您可能需要先设置REGDB_OPTIONS 并调用RegDBSetDefaultRoot。我会更新我的答案。
  • @ChristopherPainter 感谢 DV。这是唯一对我有用的解决方案,所以这是我发布的解决方案。
【解决方案3】:

你为什么不检查这个文件:

%systemroot%\Microsoft.NET\Framework\v4.0.30319\System.Core.dll

如果安装了框架v4,它就保证在那里。

【讨论】:

  • MS 推荐的官方方法是查找注册表项,而不是(随机)DLL。
  • 官方的方式是使用AppSearch而不是InstallScript注册功能。
  • 当您可以使用 MsiNetAssemblySupport 时,为什么还要使用其中一个? msdn.microsoft.com/en-us/library/windows/desktop/aa370325.aspx
  • Framework v4 是复数而不是单数。该属性无法区分 .NET 4.0 客户端和完整配置文件安装。但这里真正的问题是 OP 想要使用从 SetupComplete 对话框启动的自定义操作来读取注册表以查看是否安装了 .NET,询问用户是否要安装它,然后使用 LaunchAppAndWait 安装它,因为他拒绝使用设置先决条件,因为他的老板告诉他他希望这样做。
  • 不,我不会鼓励失败。 robmensching.com/blog/posts/2007/8/17/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多