2012-05-09 51 views
1

我有一個啓動和停止特定服務的應用程序。但是,這種服務是根據什麼樣的配置我建的項目名稱不同。在我的WiX的設置我有在C#項目和WiX之間共享信息

<ServiceInstall 
    <!-- etc... --> 
    Name='$(var.ServiceName)' 
    DisplayName='$(var.ServiceDisplayName)' /> 

其中var.ServiceName來自在構建過程中指定的包含文件。我必須在我的C#代碼中使用相同的服務名稱,但是這種方法的問題在於服務名稱寫在兩個不同的地方。我怎樣才能將服務名稱放到一個地方?

回答

1

考慮將服務名稱轉換爲一個註冊表項,其中C#代碼可以很容易地訪問它。既然你安裝一個服務,你的產品是不是複製部署反正所以使用註冊表可能是一種選擇。

+0

WiX手冊中的相關信息:http://wix.sourceforge.net/manual-wix3/write_a_registry_entry.htm – Phil

0

C#代碼如何獲取服務名稱?如果它是從配置文件中讀取的,那麼您可以在安裝過程中編輯配置,並讓安裝程序將配置文件中的服務名稱寫入配置文件中,這樣可以使代碼與您在WiX include中指定的值保持一致。

編輯。 針對這個問題;通過編輯我的意思是配置安裝程序在安裝時編輯配置。我同意「親手做」(或要求用戶這樣做)是一個壞主意。你可以在WiX中設置它。您需要使用XML File custom action,在維克斯看起來像這個片段:

<Component ...> 
    <UTIL:XmlConfig> 
    Id=... 
    On="install" 
    Action="create" 
    File=[.. config file ID goes here ...] 
    ElementPath="//myElement/livesHere 
    Node="value" 
    Name="someNodeName" 
    Value="some value to set" 
    ... 

對不起,我不能粘貼一個真正的片斷,我們的WiX的配置是專有:(希望這文檔的鏈接會看到你的權利

+0

編輯配置文件以匹配WiX文件的最佳方式是什麼?另外我更喜歡配置文本編輯器無法訪問,因爲它是安裝後不應該改變的東西。作爲嵌入式資源的配置文件可以工作。 – Phil

+0

將編輯答案。 –

0

如果你是基於配置命名它,爲什麼你不使用$(var.ProjectName.Configuration)(其中ProjectName是你的C#項目的名稱)在服務的名稱?

+0

這是個好主意。在我的特殊情況下,項目配置名稱不是windows服務的好名字。 – Phil

+0

在這種情況下,您可以讓我們讓他們建立全名或更改它們。它們只是人爲地稱爲「調試和發佈」,並且可以重新命名爲任何你喜歡的。 –

+0

如何在此時將我的項目配置名稱轉換爲C#代碼? – Phil