2012-04-06 48 views
1

我正在創建一個wix安裝程序。在一些wxs文件中,我定義了一些屬性,並且我還在C#自定義操作中創建了一些會話屬性。Wix:無法列出使用C#自定義操作創建的屬性

現在我的要求是列出所有會話屬性。 因此,對於此查詢,我查詢了屬性表並獲得了在.wxs文件中定義的所有屬性。

對於這個下面的自定義動作我已經使用:

Microsoft.Deployment.WindowsInstaller.View listBoxView = session.Database.OpenView(string.Format("select * from Property")); 
      listBoxView.Execute(); 

      while (true) 
      { 
       using (Record r = listBoxView.Fetch()) 
       { 
        if (r == null) 
        { 
         break; 
        } 
        else 
        { 
          Console.WriteLine(r[1].ToString(), r[2].ToString()); 

         } 

        } 
       } 
      } 
     } 

不過,這並不列出,我已經使用C#自定義操作創建的任何會話屬性。

有人可以幫助我如何列出使用c#自定義操作創建的屬性或這些屬性的存儲位置?

感謝很多

回答

2

當查詢屬性表您的樣品做的方式,你只能在你的維克斯創作靜態定義的這些屬性,而這種預期。在安裝時,存在一個稱爲內存中屬性集合的概念 - 這包括以各種方式定義的所有屬性:靜態屬性表,通過命令行,系統提供,定製操作中定義的系統等。

您可以通過Session對象訪問所有這些屬性。請致電session[name],其中name是您將獲得的財產的名稱。我懷疑是否有一個爲屬性定義的枚舉器,但在現實生活中,您很少需要迭代屬性 - 而是嘗試獲取某個屬性。

+0

感謝您的回答。但我的要求是我必須列出所有會話屬性,無論是靜態還是內存中的屬性集合。如果他們有某種方式列出來,請讓我知道。我可以一一列出它們,但是這會非常痛苦,因爲我有很多在c#代碼中定義的屬性。 +1您的寶貴意見,但我沒有足夠的信用。 – 2012-04-07 05:52:20

+1

不,MSI只公開MsiGetProperty和MsiSetProperty。沒有MsiListProperties()函數,因此session可以使用item [string] get封裝這些函數;組;沒有什麼可用來實現一個IEnumerable。 – 2012-04-09 20:21:33

0

解決方法,如果你真的需要枚舉它(需要MSI 4.0或更新版本):

添加完整日誌記錄在項目

<Property Id="MsiLogging" Value="Iwearucmopvx" /> 

這將記錄整個安裝過程到%TEMP%文件夾。

然後獲得與日誌文件的位置:

var logFile = session["MsiLogFileLocation"]; 

由於日誌文件是由MSI鎖定日誌,你必須訪問它在共享模式:

new FileStream(logFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 

閱讀它,並獲得最新通過搜索以「PROPERTY CHANGE:」開頭的行來查找內存中的PROPERTY值。

MSI (c) (90:78) [21:07:16:108]: PROPERTY CHANGE: Adding MsiRunningElevated property. Its value is '1'. 
MSI (c) (90:78) [21:07:16:108]: PROPERTY CHANGE: Adding Privileged property. Its value is '1'. 
MSI (c) (90:78) [21:07:16:108]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2 
MSI (c) (90:78) [21:07:16:108]: PROPERTY CHANGE: Adding USERNAME property. Its value is 'Employee'. 
MSI (c) (90:78) [21:07:16:108]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info 3: 2 
MSI (c) (90!A8) [21:07:30:900]: PROPERTY CHANGE: Modifying WEB_APP_NAME property. Its current value is '$projectname$/v1.0.0'. Its new value: '$projectname$\v1.0.0'. 
MSI (c) (90!A8) [21:07:30:901]: PROPERTY CHANGE: Adding WEB_APP_NAME_NORMAL property. Its value is '$projectname$/v1.0.0'. 
MSI (c) (90!A8) [21:07:30:901]: PROPERTY CHANGE: Adding WEB_APP_NAME_LAST property. Its value is 'v1.0.0'. 

缺點是在%TEMP%文件夾中總會有一個日誌。也許增加一些清理或東西。