2012-02-02 476 views
2

我正在開發一個C#Visual Studio應用程序,並使用了一個config.txt文件。但是,當應用程序安裝在另一臺機器上時,如何才能找到config.txt文件路徑,並考慮到用戶將在自定義路徑(C:\ Folder X)上安裝應用程序?查找文件路徑

+0

這將取決於你是如何安裝應用程序。請提供更多關於如何安裝應用程序的信息。 – 2012-02-02 12:40:00

+0

大家都假設文件將與可執行文件一起使用,而OP沒有提及任何有關它的信息。 – 2012-02-02 12:42:21

+1

該應用程序打包在一個msi中,並且該文件與msi嚮導中用戶給出的路徑中的其他文件(包括exe文件)一起解壓縮。我需要這個文件的路徑來讀取應用程序執行時的配置。可以修改文件內容以更改應用程序的配置。 – yoozz 2012-02-02 13:09:02

回答

2

如果配置文件在同一目錄下的可執行文件,你可以使用:

string exePath = Assembly.GetExecutingAssembly().Location; 
string configFileName = "config.txt"; 

string configFilePath = Path.Combine(Path.GetDirectoryName(exePath), configFileName); 

編輯:

GetExecutingAssembly()應該返回的路徑C:\Program Files\MyAddIn\your_plugin.dll,因爲它返回調用它的加載程序集的實際路徑。由於事實並非如此,我們可以猜測MS Project實際上是在加載它之前將其複製到本地(也許是臨時)目錄中(....\AppData\Local\Assembly\...路徑)。

由於我不知道爲什麼 MS項目是如何做到這一點,來處理你的問題,我認爲最安全的方式是你的外接程序文件夾的位置存儲到上安裝的註冊表。如果您將它作爲MSI發佈,應該很容易讓您的安裝程序添加一個包含您的插件文件位置的註冊表項。如何做到這一點將取決於你如何建立你的MSI:vdproj?維克斯?

然後在您的插件的代碼中,您可以讀入註冊表以獲取您的路徑。

+0

這給了我以下路徑:C:\ Users \ UserName \ AppData \ Local \ Assembly \ dl3 .... \ config.txt。但是該文件是:C:\ Program Files \ Application \ config.txt – yoozz 2012-02-02 13:13:45

+0

@yozcia看起來像您從位於另一個位置的程序集中調用代碼而不是可執行文件本身。嘗試用'GetEntryAssembly'代替'GetExecutingAssembly' – ken2k 2012-02-02 13:17:23

+0

這給了我null錯誤:對象引用未設置爲對象的實例。我的應用程序是MS PROJECT的附件。它的功能是每次打開MS PROJECT時讀取配置文件。問題是,當我在不同的路徑上安裝應用程序時,我找不到路徑了。 – yoozz 2012-02-02 13:36:50

0

而不是使用文本文件,您可以使用.net設置來存儲此應用程序的設置。

更多信息可以看出here

0

如果配置文件是在同一文件夾中的應用程序,你可以使用Assembly.GetExecutingAssembly().Location