2011-10-05 15 views
4

我有一個c#解決方案,包含兩個常規項目和一個安裝項目。其中一個常規項目是可執行文件,另一個是dll,我也在其他解決方案中使用。該dll項目依賴於某個事件日誌源,它可以登錄,並且由於該程序旨在由不允許創建日誌源的用戶運行,因此必須在安裝時創建該源。確保執行一個dll所需的安裝操作而不重複代碼

我通過爲我的可執行項目創建一個安裝程序類,在安裝程序中創建日誌源並將該安裝程序包含在安裝項目中的自定義操作中來完成此操作。這工作,但現在我必須爲每個其他項目創建一個類似的安裝程序,也使用該DLL。

最好的解決方案是,如果我可以爲dll編寫一個安裝程序,然後在安裝項目中爲自定義操作選擇dll。這樣我只需要一次說明日誌創建需求。但是,我無法爲安裝項目中的自定義操作選擇dll項目輸出。

另一個好的解決方案是,如果我能以某種方式指定可執行文件的安裝程序應該是可傳遞的,這樣它也可以執行可執行項目所依賴的任何項目的安裝操作,但我不知道如何指定該要求。

那麼我能做些什麼來避免在不同項目之間重複安裝代碼?

+0

如何從想要寫入事件日誌源的程序創建事件日誌源,該DLL? (而不是所有的安裝項目和安裝程序混亂) – mtijn

回答

1

您應該可以將安裝程序類添加到您的DLL中,然後在安裝項目中註冊DLL以執行自定義操作。如果您嘗試過這種方式並遇到問題,您能否更具體地瞭解哪個版本的Visual Studio以及您正在使用哪種類型的安裝項目?

+0

啊,我確實可以做到這一點。我之前的問題是,我沒有在安裝項目中包含dll項目輸出,不知怎的,我已經把它放到了我的腦海中,由於dll項目不可執行,我無法這樣做。有時候,只需要有人說某件事很容易做到,然後就可以立即看到解決方案。謝謝。 – Boris

1

我只需要一個MyApplication.Installation程序集,在其中放置一個自定義操作來創建事件源。我所有的安裝項目都引用這個程序集並調用它的自定義操作。

1

這個怎麼樣?您可以創建一個簡單的批處理文件或PowerShell腳本來創建您想要創建的日誌文件。您可以爲dll文件創建一個安裝程序(或者甚至整個解決方案都無關緊要)。然後,您可以調用批處理文件你剛剛從安裝程序中寫道[請參考here]。這樣,您就不會複製依賴文件/資源​​的創建邏輯;你可以基本上使用相同的批處理文件進行多個安裝項目(假設它們使用相同的資源)。

我希望這可以回答你的問題。 更進一步,你的客戶在什麼環境?他們仍然在Win XP(SP2或之前)?如果是這樣,你必須做一些類似於你現在已經想到的東西。但是,如果情況並非如此,如果您的客戶使用Win 7,則可以使用nuget發佈您的垃圾箱(請參閱here)。我承認這仍然是一個源代碼共享解決方案。但我相信這種方法也可以擴展到發佈二進制文件。

相關問題