请告诉我在括号中的这一行写什么
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 :(得分:2)
正如Adam Goodwin在评论中所说,您需要输入您要查找的注册表项的路径,但不需要为此使用自定义操作
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属性设置为&#34;#1&#34;如果找到了注册表项,如果没有找到则没有任何内容。 第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>
Installed是一个Windows Installer属性,可确保仅在用户安装应用程序时进行检查,而不是修复或删除。如果设置了属性,则条件的NETFRAMEWORK20部分将通过。如果未设置,安装程序将显示错误消息,然后中止安装过程。