0

我正在將Windows服務從Visual Studio 2010遷移到VS2012,並且由於此人不支持Visual Studio安裝項目,我試圖使用WiX重新創建我的安裝項目。將參數傳遞給安裝程序使用WiX的Windows服務類

在VS2010上,我使用用戶界面中的標準Textboxes表單將一些參數傳遞給我的Installer類,它將使用此信息來實例化實體框架的DbContext並使用ObjectContext.CreateDatabase()方法部署數據庫。

這裏是我怎麼做我的安裝程序類的摘錄:

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

     string dataSource = string.IsNullOrEmpty(Context.Parameters["DataSource"]) ? "." : Context.Parameters["DataSource"]; 
     // some more code... 
    } 

是否可以指定此參數與維克斯?

我試圖通過在WiX的Xml的「Argument」參數上傳遞參數來做到這一點,但安裝程序似乎並不接受它(它並沒有指責任何錯誤,而是表現得好像我沒有傳遞任何參數都

<ServiceInstall Id="ServiceInstaller" 
          Type="ownProcess" 
          Vital="yes" 
          Name="NFeConnectorService" 
          DisplayName="NFeConnector Service" 
          Description="Servico de Mensageria para NFe" 
          Start="auto" 
          Account="LocalSystem" 
          ErrorControl="ignore" 
          Interactive="no" 
          Arguments="/InitialCatalog=&quot;NFeConnector2&quot; " /> 

我也試着用下面的語法沒有成功。?

Arguments="/InitialCatalog=NFeConnector2" 

Arguments="InitialCatalog=NFeConnector2" 

有沒有人對我怎樣可以通過這個參數來我的安裝程序類的任何想法

回答

1

你不可能得到這個工作。問題是Visual Studio安裝程序類不是由Windows Installer直接調用的。有一個未公開的接口調用C++ Dll,然後通過反射調用您的程序集和安裝程序類。 VS生成一個調用這個C++的Dll傳遞一些與你的字符串串聯的未記錄參數。我不知道你已經嘗試過了什麼,但是除非你已經反向設計了這些調用並且引入了C++ Dll,否則找出了Dll的入口點和參數,那麼它將無法工作。

簡短的回答是不要打擾。安裝程序類只是一個Visual Studio的東西,這就是它們不遷移的原因。 WiX支持C#自定義操作(請參閱WIX - Adding a C# custom action code之類的內容),並遠離安裝程序類。

+0

感謝您的回覆。是的,我擔心我必須那樣做,我主要想知道是否有辦法做到這一點......但是關於Installer Clas的大部分答案都表明最好的辦法是遠離它們。 –