2013-12-08 23 views
0

我用下面的代碼來構建期望的路徑爲XML文件:一致的ApplicationData路徑

System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData); 

當從Windows中執行的窗體應用程序,它返回:

C:\Users\MyUsername\AppData\Roaming\...\Database.xml 

當從Windows服務中執行,它返回:

C:\Windows\system32\config\systemprofile\AppData\Roaming\...\Database.xml 

我我現在訴諸於自定義安裝程序操作,因爲自定義操作將具有桌面環境,所以會在註冊表項中保留該路徑。如果有更好的方法,請讓我知道。

我真正感興趣的是找出原因,首先是行爲不同。有問題的Windows服務設置爲使用LocalSystem帳戶以防萬一。

+0

ApplicationData是用戶特定的......你確定你不需要CommonApplicationData? –

+0

「作爲當前漫遊用戶的應用程序特定數據的公共存儲庫的目錄。」 - 爲什麼你會期望它對不同的用戶是一樣的? –

+0

你們中的任何一個人都應該將此作爲答案。我還沒有對它進行測試,但它是完全有道理的,因爲桌面應用程序在登錄用戶下運行,而服務在LocalSystem下運行。 –

回答

2

只有你知道什麼具體要求此文件夾,但如果是多個用戶之間共享數據,ApplicationData是錯誤的選擇:

,可作爲應用程序特定的公共儲存庫的目錄當前漫遊用戶的數據。

漫遊用戶在網絡上的多臺計算機上工作。漫遊用戶的配置文件保存在網絡服務器上,並加載到系統時,上

用戶日誌中看到SpecialFolder枚舉和選擇適合您的需求的適當的值 - 一個不依賴於一個特定的用戶。其中大部分以Common開頭。

1

我建議你應該檢查並確保兩個應用程序由同一個用戶運行。 我在winform應用程序和webservice應用程序中測試了你的代碼,但它們的值是相同的,所以我找不到你真正的問題。 祝你好運!

相關問題