我正在從「D:\ App \ program.cs」運行我的C#應用程序。我的應用程序需要執行一個放在「C:\ Program Files \ software \ abc.exe」中的文件。.NET中的相對路徑
如何設置我的程序中執行「abc.exe」的相對路徑?
我正在從「D:\ App \ program.cs」運行我的C#應用程序。我的應用程序需要執行一個放在「C:\ Program Files \ software \ abc.exe」中的文件。.NET中的相對路徑
如何設置我的程序中執行「abc.exe」的相對路徑?
一個批處理文件來回答這個問題是如何獲取顯示pathB從pathA相對位置的路徑。您可以使用Uri類來獲取相對路徑。
string pathA = @"C:\App\program.cs";
string pathB = @"C:\program files\software\abc.exe";
System.Uri uriA = new Uri(pathA);
System.Uri uriB = new Uri(pathB);
Uri relativeUri = uriA.MakeRelativeUri(uriB);
string relativeToA = relativeUri.ToString();
Console.WriteLine(relativeToA);
這產生了相對路徑 「../program%20files/software/abc.exe」。
我已經將您的示例從D更改爲C,儘管上面的代碼仍然有效,但是因爲您不能在兩個不同驅動器號的位置上有相對路徑,所以只會產生絕對值。
,或者如果C#位是一個紅色的鯡魚,和我現在明白你想運行一個批處理文件:
在批處理文件中提出:然後
cd c:\program files\software\
abc.exe
abc.exe將執行軟件文件夾而不是批處理文件的文件夾。
目前尚不清楚你所說的「設置相對路徑」的意思,但如果你使用Process
和ProcessStartInfo
運行可執行文件,我會建議你使用絕對路徑來指定可執行文件,並ProcessStartInfo.WorkingDirectory
告訴過程在哪裏運行(以便在新過程中適當評估相對路徑)。
編輯:如果你想在批處理文件來運行C:\ Program Files文件\ SOFTWARE \ abc.exe然後批處理文件的內容應該是剛:
"c:\Program Files\Software\abc.exe"
(注意引號允許空間)。
雖然我沒有看到這與相對路徑名有什麼關係。
您不應該使用相對路徑來引用程序文件中的某些內容。我建議使用Environment.GetFolderPath(和Environment.SpecialFolder)獲取Program Files路徑,然後使用一些配置設置獲取程序的提示路徑。
我不應該這樣做或不能這樣做?任何方式我的要求是使用相對路徑來做到這一點。謝謝。 – Anuya 2010-09-07 05:45:02
@Anuya,你可以這樣做,但不應該這樣做,因爲 - 例如「程序文件」可以存在於任何邏輯驅動器上。您可以使用特殊文件夾來獲取程序的路徑並在批處理文件中使用完整路徑(假設批處理文件由代碼生成)。不知道爲什麼堅持相對路徑。 – VinayC 2010-09-07 05:49:39
所有機器都在c驅動器上有程序文件。它是系統安排的一部分。可能這就是爲什麼要求是這樣的。所以在這種情況下,我認爲在使用指向「c:\ program files \ software \ abc.exe」的相對路徑時不會出現問題。現在我該怎麼做?謝謝。 – Anuya 2010-09-07 06:01:28
我的應用程序將創建一個帶有路徑和可執行文件名的批處理文件。然後按照需求通過cmd執行批處理文件。在這種情況下,我需要爲應用程序提供一個相對路徑,以便在執行之前寫入批處理文件。明白嗎? – Anuya 2010-09-07 05:35:35
爲了讓我的問題更簡單..我想通過雙擊「D:\ BatchFiles \ ExecAbc.bat」中的批處理文件在「c:\ program files \ software \ abc.exe」中執行.exe。在批處理文件裏面執行abc.exe?謝謝。 – Anuya 2010-09-07 05:37:22
@Anuya:我編輯了我的答案。它的相對路徑還沒有完全清楚。也許你誤解了這個術語? – 2010-09-07 05:59:05