2014-09-04 88 views
0

请告诉我,在此行中括号写什么WIX CustomAction C#

var UtilityKey = Registry.LocalMachine.OpenSubKey(...); 

这是CustomAction的代码:

public static ActionResult ConfigUpgrade(Session session) 
     { 
      var UtilityKey = Registry.LocalMachine.OpenSubKey(...); 
    if (UtilityKey != null) 
      { 
       var value = UtilityKey.GetValue("DisplayVersion"); 
       session.Log("Utility installation found! Version: {0}", value); 
       session["UTILITYINSTALLATIONEXISTS"] = "1"; 
      } 
      else 
      { 
       session.Log("Utility installation not found!"); 
       session["UTILITYINSTALLATIONEXISTS"] = "0"; 
      } 

      return ActionResult.Success; 
    } 

谢谢

+0

真的没有人能回答这个简单的问题吗? – 2014-09-04 12:51:06

+0

你应该传递你正在寻找的子键的名字,但是我不知道除了你以外别人能知道那个子键是什么。什么是您期望找到'DisplayVersion'值的子项?我认为这可能是您的应用程序的GUID,如果这与您尝试执行的操作有关:http://msdn.microsoft.com/en-us/library/aa372105%28v=vs.85%29。ASPX。 – 2014-09-04 13:03:24

+0

我总是得到一个错误:错误命令“...”用代码1退出。\t你能帮我吗? – 2014-09-04 13:13:52

回答

2

正如亚当·古德温说在注释中,您需要输入您正在查找的注册表项的路径,但不需要为此使用自定义操作

http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/read_a_registry_entry.html

如何:读取注册表项安装

安装程序在经常需要在安装过程中查找注册表项的值。生成的注册表值通常用于稍后安装的条件语句中,例如在找不到注册表项时安装特定组件。如何演示从注册表中读取整数值并验证它是否存在于启动条件中。 步骤1:将注册表项读入属性

使用该元素读取注册表项。以下代码片段查找在目标计算机*上标识.NET Framework 2.0安装的密钥的存在。

<Property Id="NETFRAMEWORK20"> 
    <RegistrySearch 
       Id="NetFramework20" 
       Root="HKLM" 
       Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" 
       Name="Install" 
       Type="raw" /> 
</Property> 

RegistrySearch元素指定一个唯一的id,要搜索的注册表中的根,以及要查看的密钥。 name属性指定要查询的特定值。 type属性指定值应该如何处理。 Raw表示该值应根据值的数据类型加前缀。在这种情况下,由于Install是一个DWORD,因此结果值将以#作为前缀。

上面的示例将如果找到注册表项将NETFRAMEWORK20属性设置为“#1”,并且如果它不是。 第2步:在条件下使用该属性

属性设置后,您可以在您的WiX项目中的任何位置使用它。以下片段演示如何使用它来阻止安装,如果未安装.NET Framework 2.0。

<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again."> 
    <![CDATA[Installed OR NETFRAMEWORK20]]> 
</Condition> 

安装的是Windows Installer属性,确保检查只是做当用户安装该应用程序,而不是在修复或删除。如果该属性已设置,则该条件的NETFRAMEWORK20部分将会通过。如果未设置,安装程序将显示错误消息,然后中止安装过程。

  • 此注册表项仅用于示例目的。如果您想检测.NET Framework的安装版本,则可以使用内置的WiX支持。有关更多信息,请参阅如何:检查.NET Framework版本。
+0

非常感谢您的回复。这与我所需要的相似。 我的问题:如果您使用2版本的产品,然后更新该文件,如果您使用版本3,然后离开该文件不更新。 – 2014-09-05 10:59:31

+0

我纠正了我的错误。谢谢你,你的榜样促使我做出正确的决定。 – 2014-09-05 11:38:55

+0

没问题,通常如果你的任务涉及微软技术,特别是如果它不是一个新功能,那么WiX或扩展将已经有一种惯用的方式来实现它。 – Novaterata 2014-09-05 12:46:21

相关问题