儘管可以運行批處理文件格式c:位置,但我想知道是否有可能在資源文件夾中具有.bat文件。我可以在Visual stuido C#項目的資源文件夾中放置一個windows(.bat)文件嗎?
我想這
Process p = new Process;
p.StartInfo.FileName = @"\Resources\batchfile.bat";
這
p.StartInfo.FileName = @"\Resources\batchfile";
兩個不工作。
儘管可以運行批處理文件格式c:位置,但我想知道是否有可能在資源文件夾中具有.bat文件。我可以在Visual stuido C#項目的資源文件夾中放置一個windows(.bat)文件嗎?
我想這
Process p = new Process;
p.StartInfo.FileName = @"\Resources\batchfile.bat";
這
p.StartInfo.FileName = @"\Resources\batchfile";
兩個不工作。
string location;
Process p = new Process;
location = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
[email protected]"\Resources\batchfile.bat";
p.StartInfo.FileName = location;
你可以把一個批處理文件放在你想要的任何文件系統位置。
雖然它看起來像批處理文件的路徑是錯誤的。具有前導反斜槓的路徑將相對於當前驅動器的根目錄進行解釋。這可能不是你的批處理文件的地方。它可能位於應用程序自己的安裝文件夾的Resources子目錄中。至少,從這些字符串中刪除前導反斜槓。然後他們將被解釋爲相對於您的進程當前的工作目錄。
不過,使用完全限定的路徑會更好。當你不期待的時候,當前的工作目錄有改變的趨勢。
同意 - 但因爲你是從代碼開始,您還可以獲取當前的EXE的位置,無論是工作文件夾中,通過使用System.Reflection.Assembly.GetCallingAssembly()的位置,然後只需追加「Resources \ batchname.bat」即可。 – SqlRyan 2011-05-31 20:14:52
是的,@Rwmnau。我應該更清楚。我的意思是程序應該使用完全合格的路徑*到EXE目錄*(因爲那是資源文件夾的目錄),而不是當前的工作目錄。 – 2011-05-31 20:16:32
謝謝Rob和rwmnau。 System.Reflection.Assembly.GetCallingAssembly()。Location方法還包括(.exe文件)。有沒有辦法截斷它。我想獲得字符串大小和截斷的exe文件的大小...任何更好的sugessions – 2011-05-31 21:38:40
(您的C#項目的)資源通常是在編譯時鏈接到您的程序集中的文件。如果你在那裏放置一個批處理文件,你必須在運行時將它解壓縮到像%TEMP%文件夾這樣的文件夾,然後從那裏運行它。
您可能希望將.bat文件包含爲嵌入式資源。因此,在Visual Studio中,您將打開文件上的屬性,併爲「構建操作」選擇「Embedded Resource」。
現在爲了有趣的一部分....在您的應用程序中,您需要提取文件並將其寫入磁盤,然後才能在Assembly對象上使用GetManifestResourceStream
方法。這有點棘手,因爲您需要將資源名稱傳遞給方法,並且該名稱最終取決於您的程序集名稱空間以及路徑(所以如果您的項目是MyProject
,並且您的文件位於Resources\MyBat.bat
,那麼資源名稱將是MyProject.Resources.MyBat.bat
...至少我認爲這是正確的)
實際上存在一個關於如何做到這一點的現存問題here,並且有比我要鞭打的更好的代碼示例。 :)
謝謝ckramer ...即時通訊使用這也用於我的圖像等:) – 2011-06-01 23:28:41
你可以使用'Path.Combine'爲該concatanation,「最佳」doesen't給你很大的餘地。 – Jodrell 2011-06-01 16:46:14
謝謝Jodrell .. – 2011-06-01 23:27:59