1

除此之外,我的安裝程序類沒有什麼特別之處。它安裝Windows服務。但是現在我需要提示用戶輸入一些信息並將信息傳遞給安裝程序類,以便安裝程序類可以更新app.config。使用自定義操作的Visual Studio 2010 MSI項目和服務安裝程序類

我添加了三個額外的頁到默認用戶界面:

  • 文本框(A)
  • 文本框(B)
  • 文本框(C)

變量:

  • 在A上,我使用的是EDITA1,其餘都是隱形的
  • 在B,我使用EDITB1,其餘的都看不見
  • 在C,我使用EDITC1,其餘的都看不見

在「安裝」自定義操作,我有屬性設置這樣的:

  • 參數:空白
  • 條件:空白
  • CustomActionData:/ MYPARAM1 = [EDITA1]/MYPARAM2 = [EDITB1]/MYPARAM3 = [EDITC1]
  • InstallerClass:真

在安裝程序類,安裝被重寫

public override void Install(IDictionary stateSaver) 
{ 
    base.Install(stateSaver);  

    // This is to display the Parameters 
    // It comes up blank. No Parameters. 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    foreach (string s in Context.Parameters.Keys) 
    { 
     sb.Append(s); 
     sb.Append(":"); 
     sb.AppendLine(Context.Parameters[s]); 
    } 
    //throw new InstallException(sb.ToString()); 

    //This returns TRUE. 
    //throw new InstallException(Context.Parameters.ContainsKey("MYPARAM1").ToString()); 

    string x= Context.Parameters["MYPARAM1"]; 
    if (string.IsNullOrEmpty(x)) 
    { 
     throw new InstallException("Missing parameter 'MYPARAM1'"); 
    } 

    <snip> 
} 

當應用程序運行時,MYPARAM1是空的,所以我認爲在年底InstallException。

我在安裝的頂部添加了兩個測試代碼塊。第一個,創建一個字符串,其中包含應該在命令行中輸入的所有參數。我根本沒有得到我的參數。第二個塊報告「TRUE」 - 表示關鍵字「MYPARAM1」在命令行上。第一和第二塊不同意。怎麼會這樣?

作爲一個實驗,我嘗試將字符串更改爲/ MYPARAM1而不是MYPARAM1。這沒有幫助。

回答

1

第一步是創建詳細日誌以查看傳遞給您的自定義操作的完整命令行。創建日誌的命令:msiexec /i "C:\MyPackage\Example.msi" /L*V "C:\log\example.log"

在日誌中,您可以搜索屬性名稱以查看它們是否設置正確,並且正在傳遞給您的自定義操作。

+0

謝謝!我發現了這樣的問題。 – 010110110101

相關問題