2013-07-26 41 views
-1

例如,我有這樣的代碼:如何將一些bat文件添加到我的項目中,以便在硬盤上不再需要它們?

Process proc = new Process(); 
proc.EnableRaisingEvents = true; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.FileName = "dxdiag.bat"; 
proc.StartInfo.CreateNoWindow = true; 
proc.Start(); 
proc.WaitForExit(); 
proc.Close(); 

我做了一個測試,如果我刪除我的項目\ debug目錄IM上線得到一個異常文件dxdiag.bat:

proc.Start(); 

那該文件未找到。 一旦文件在\ debug目錄中就可以工作。

我想將dxdiag.bat文件添加到我的項目中,所以如果我發送給別人我的程序,他將能夠運行我的程序,並且該進程將從程序運行dxdiag.bat它自我,所以我一個人發送該程序將不需要bat文件在他自己的硬盤上。

+0

在Shell文件之前將字符串寫入帶有BAT擴展名的文本文件。然後在炮擊後刪除bat文件。 –

回答

2

只要你有沒有變量或nonsingleline的命令,你可以用蝙蝠文件的每一行運行該功能

internal static void executeCommand(string command, bool waitForExit, 
    bool hideWindow, bool runAsAdministrator) 
    { 
     System.Diagnostics.ProcessStartInfo psi = 
     new System.Diagnostics.ProcessStartInfo("cmd", "/C " + command); 

     if (hideWindow) 
     { 
      psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     } 

     if (runAsAdministrator) 
     { 
      psi.Verb = "runas"; 
     } 

     if (waitForExit) 
     { 
      System.Diagnostics.Process.Start(psi).WaitForExit(); 
     } 
     else 
     { 
      System.Diagnostics.Process.Start(psi); 
     } 
    } 

所以你也可以保存文本代碼

string bat_file = @"@echo off\ncopy c:\users\Desktop\filea.txt c:\users\Desktop\fileb.txt\n..."; 

否則我會創建一個臨時的bat文件,運行它並刪除它。

0
// create the dxdiag.bat file 
using (StreamWriter sw = new StreamWriter("dxdiag.bat")) 
{ 
    sw.WriteLine("........."); 
    // ...... 
} 

Process proc = new Process(); 
proc.EnableRaisingEvents = true; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.FileName = "dxdiag.bat"; 
proc.StartInfo.CreateNoWindow = true; 
proc.Start(); 
proc.WaitForExit(); 
proc.Close(); 

//delete the file 
File.Delete("dxdiag.bat"); 
+3

如果當前工作目錄的位置不可寫入(例如,從只讀網絡共享位置運行),則應該將該文件寫入'Path.Combine(Path.GetTempPath(),「dxdiag.bat」)' –

0

最簡單的解決方案是將bat文件添加到Visual Studio中的項目中。爲此,請執行以下步驟:

  1. 將bat文件複製到保存項目的目錄中。
  2. 將文件添加到項目中。
  3. 將屬性「Build Action」設置爲「Content」。
  4. 將屬性「複製到輸出目錄」設置爲「始終複製」。

這會將蝙蝠填充複製到構建的輸出目錄。如果您然後分發您的程序,您可以發送輸出目錄。這當然不會阻止用戶表單刪除bat文件。

另一種選擇是將批處理文件作爲資源嵌入到項目中並從那裏使用它。

0

通過右鍵單擊項目並選擇添加現有項目,將dxdiag.bat添加到項目中。然後,一旦它在您的項目中,請右鍵單擊dxdiag.bat文件並選擇屬性。將「複製到輸出目錄」屬性設置爲「始終」。

1

你想要做的就是將.bat文件作爲嵌入式資源嵌入到coshmos中。爲此,您需要右鍵單擊解決方案資源管理器中的.bat文件,選擇屬性,然後在「構建操作」部分下選擇「嵌入式資源」。在此之後,假設你的bat文件是在程序的根目錄下,下面的代碼應該工作:

string batFileName = "dxdiag.bat"; 
string programName = Assembly.GetExecutingAssembly().GetName().Name; 

using (Stream input = Assembly.GetExecutingAssembly().GetManifestResourceStream(programName + "." + batFileName)) 
{ 
    using (TextReader tr = new StreamReader(input)) 
    { 
     File.WriteAllText(batFileName, tr.ReadToEnd()); 
    } 
} 


Process proc = new Process(); 
proc.EnableRaisingEvents = true; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.FileName = batFileName; 
proc.StartInfo.CreateNoWindow = true; 
proc.Start(); 
proc.WaitForExit(); 
proc.Close(); 

這段代碼的前半部分拉bat文件了嵌入式資源並將其保存爲一個實際的,但臨時的,在程序根目錄下的bat文件。之後它基本上和你的代碼一樣。

此外,如果您在此代碼後添加File.Delete(batFileName);,它會自動刪除它創建的臨時bat文件。

相關問題