2014-09-04 92 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

相關問題