2008-10-18 58 views
1

在VS2008中,我編寫了一個c#服務,一個安裝程序並創建了一個安裝程序包來安裝它。該服務需要加載一個xml文件來操作。哪裏是把這個文件放在VS安裝項目提供的各種文件系統文件夾中的最佳位置,然後我如何從我的代碼中引用這些路徑?在c中查找安裝程序路徑#

感謝

[我要指出的服務爲本地服務,這意味着通過在VS安裝項目「用戶的Application Data文件夾」項目提供的應用 - 文件夾是無法訪問的,運行甚至當「安裝爲所有用戶「在安裝過程中使用。我可以很容易地破解這個,但想了解最佳實踐]

回答

4

我不知道哪個地方更好地存儲XML文件。我不認爲這很重要。但是如果你需要在系統中獲得特殊的文件夾路徑,你可以使用Environment類來完成。以下代碼行獲取程序文件的路徑:

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); 
+0

好的,簡單的例子。安裝程序創建文件夾%程序文件%\ mycompany \ myapp,但是如果安裝人員更改安裝路徑,這可能會發生更改。所以,例如,我怎樣才能到達安裝文件夾?這個例子中的代碼只能和ProgramFiles一樣。 – spender 2008-10-18 20:53:06

0

您可以隨時使用註冊表。

1

讀取由從安裝項目創建安裝程序使用的安裝路徑:

1)打開您的安裝項目

2)從裝配添加自定義操作「自定義操作」編輯器,你的安裝程序類位於(如果您還沒有這樣做的話)

3)選擇這個自定義操作,並在屬性網格

4)添加到/myKey="[TARGETDIR]\"在CustomActionData您安裝類,你可以訪問您的VAL如下所示:Context.Parameters["myKey"]在您的方法覆蓋取決於您在第2步中的選擇

1

這是一個非常古老的問題,但由於我不同意接受的答案,至少如果XML文件將由程序更新,我無論如何,我會發布這個。

安裝服務器式程序(Windows服務或其他非用戶特定程序)時,我所做的是在程序文件中隨程序一起安裝默認或模板XML設置文件。但我從不試圖寫入該文件 - 這通常是不允許的。

相反,在程序初始化過程中,我測試文件是否已經被複制到我在C:\ ProgramData下創建的子文件夾中,即「C:\ ProgramData \ myCompanyName \ myProgramName \ mySettingsFile.xml」。 (使用Environment.SpecialFolder.CommonApplicationData查找C:\ ProgramData - 請參閱:http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx)。如果XML設置文件已經存在,我只需打開它並使用它 - 它是可寫的。如果它不存在,那麼我會根據需要創建子文件夾,並從程序文件複製模板XML設置文件 - 這應該是一次性操作,僅在安裝後第一次運行程序時執行。

這裏查看更多的信息:As a developer, how should I use the special folders in Windows Vista (and Windows 7)?