簡體   English   中英

使用WiX將參數傳遞給Windows Service的安裝程序類

[英]Pass arguments to Installer Class of Windows Service with WiX

我正在將Windows服務從Visual Studio 2010遷移到VS2012,並且由於該服務不支持Visual Studio安裝項目,因此我嘗試使用WiX重新創建我的安裝項目。

在VS2010上,我使用了用戶界面中的標准“文本框”表單將一些參數傳遞給我的安裝程序類,該參數將使用此信息來實例化Entity Framework的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指定此參數?

我試圖通過在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" 

有誰知道如何將這些參數傳遞給Installer類?

您不太可能使它正常工作。 問題是Windows Installer不會直接調用Visual Studio安裝程序類。 有一個未記錄的接口,該接口調用C ++ Dll,然后通過反射調用您的程序集和安裝程序類。 VS生成對此C ++ Dll的調用,並傳遞一些未記錄的參數,這些參數與您的字符串連接在一起。 我不知道您嘗試了什么,但是除非您對這些調用進行了反向工程並包含了C ++ Dll,弄清了Dll入口點和參數,否則它將無法工作。

簡短的答案是不要打擾。 安裝程序類只是Visual Studio的東西,這就是為什么它們不遷移的原因。 WiX支持C#自定義操作(請參閱WIX-添加C#自定義操作代碼 ),並且擺脫了安裝程序類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM