2009-08-12 78 views
0

我有一個包含客戶端項目,WindowsService項目,ServiceConsole項目VS2008解決方案。當我部署時,我希望WindowsService和ServiceConsole位於同一個文件夾中,因爲ServiceConsole需要訪問WindowsService的app.config(即Settings.settings)文件來配置它。這可能與ClickOnce?如果是這樣,那麼實現這一目標的步驟是什麼?ClickOnce的問題

我的另一個問題是關於客戶端的安裝。一旦安裝文件發佈到文件服務器上的某個位置,是否可以修改它的應用程序設置?如果是這樣,他們在哪裏?我想從我的ServiceConsole應用程序中設置服務器的IP地址,以便安裝客戶端的用戶不必擔心。

感謝您的任何幫助。

+0

Lenard,看我更新的答案。 – 2009-08-13 14:07:39

回答

1

在app.config添加到ServiceConsole的項目爲紐帶(添加現有項目,導航到它,然後選擇「添加爲鏈接」,從「添加」按鈕,拆分)。然後,您需要在鏈接的構建屬性中設置它爲「內容」和「始終複製」。最後,進入「發佈」選項卡的「文件」對話框,並確保它在那裏列出。您可能需要「顯示所有文件」才能看到它。

關於第二個問題:我沒有寫一個應用程序的設置文件,因爲新寫入的設置是每個用戶的傾向。他們被埋在用戶個人資料目錄中的隱藏文件夾之一中。我建議使用一個固定的位置(如CSIDL_COMMON_DOCUMENTS)使用此代碼:

Private Declare Function SHGetSpecialFolderPath Lib "shell32.dll" Alias "SHGetSpecialFolderPathA" _ 
    (ByVal hwndOwner As IntPtr, <Out()> ByVal lpszPath As StringBuilder, ByVal nFolder As Integer, ByVal fCreate As Boolean) As Boolean 
Private Const CSIDL_COMMON_DOCUMENTS As Integer = &H2E 

<snip> 

Dim lpszPath As New StringBuilder(260) 
If SHGetSpecialFolderPath(IntPtr.Zero, lpszPath, CSIDL_COMMON_DOCUMENTS, True) Then 
    _sharedDocsDir = lpszPath.ToString() 
Else 
    Throw New InvalidDataException("Couldn't get working directory root.") 
End If 

要回答你的最後一個問題,我覺得它工作正常,我的理由是,我們使用System.Configuration,而不是設計師生成的代碼。你可能會做的是把你的設置類拖到第三個程序集(第四個?),並且只是通過這兩個項目引用該程序集。它可能會比鏈接app.config更好。

+0

Bob,我是否還需要在Settings.settings文件中鏈接?當我如你所說,然後編譯,會出現大量的錯誤,如: 無法找到元素「userSettings」的架構信息。 \t 找不到元素「Server.Properties.Settings」的模式信息。 \t ServiceConsole沒有任何Settings.setting文件。 – Lenard 2009-08-12 23:11:08

+0

鮑勃,我重申了第二個問題。 – Lenard 2009-08-12 23:29:07