關于.Net中Process和ProcessStartInfor的使用

System.Diagnostics.Process.Start(); 能做什么呢?它主要有以下幾個功能:

1、打開某個鏈接網址(彈窗)。
2、定位打開某個文件目錄。
3、打開系統特殊文件夾,如“控制面板”等。

那么它是怎么實現這幾個功能的呢?在講應用前,我們先來看看Process.Star()的構造方法。

名稱 ?? ?說明
Process.Start () ?? ?啟動(或重用)此 Process 組件的 StartInfo 屬性指定的進程資源,并將其 與該組件關聯。
Process.Start (ProcessStartInfo) ?? ?啟動由包含進程啟動信息(例如,要啟動的進程的文 件名)的參數指定的進程資源,并將該資源與新的 Process 組件關聯。
Process.Start (String) ?? ?通過指定文檔或應用程序文件的名稱來啟動進程資源,并將資源

與新的 Process 組件關聯。
Process.Start (String, String) ?? ?通過指定應用程序的名稱和一組命令行參數來啟動一個進程資源 ,并將該資源與新的 Process 組件相關聯。
Process.Start (String, String, SecureString, String) ?? ?通過指定應用程序的名稱、用戶名、密碼 和域來啟動一個進程資源,并將該資源與新的 Process 組件關聯起來。
Process.Start (String, String, String, SecureString, String) ?? ?通過指定應用程序的名稱和一 組命令行參數、用戶名、密碼和域來啟動一個進程資源,并將該資源與新的 Process 組件關聯起 來。


(1) publicbool Start ()
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "iexplore.exe";?? //IE瀏覽器,可以更換
process.StartInfo.Arguments = "http://www.baidu.com";

process.Start();


(2) publicstaticProcessStart (ProcessStartInfostartInfo)
System.Diagnostics.ProcessStartInfo processStartInfo = new?
System.Diagnostics.ProcessStartInfo();
processStartInfo.FileName = "explorer.exe";? //資源管理器
processStartInfo.Arguments = @"D:\";

System.Diagnostics.Process.Start(processStartInfo);


(3) publicstaticProcessStart (stringfileName)
System.Diagnostics.Process.Start(@"D:\Program Files\Tencent\QQ\Bin\QQ.exe");? //直接 調用打開文件


(4) Process.Start (StringfileName, Stringarguments)?

System.Diagnostics.Process.Start("explorer.exe", "D:\\Readme.txt");?? //直接打開文件Readme.txt


上面已經舉例了用process.start()打開網站的方法,現在講講用processs.star()定位到某個文件的 方法。

這種定位方法類似于快捷方式上的查找目標://explorer /select,"D:\Program Files\Tencent \QQ\Bin\QQ.exe"

String path = @"D:\Program Files\Tencent\QQ\Bin\QQ.exe";
System.Diagnostics.Process.Start("explorer.exe", "/select," +path);? //定位打開D:\Program? Files\Tencent\QQ\Bin文件目錄并選中了QQ.exe
注意:/select后還有個逗號(,)。

接下來來講講通過調用rundll32.exe來打開一些系統特定文件,先簡單介紹下rundll32.exe的功能 和作用。
顧名思義,rundll32就是"執行32位的dll文件",也就是執行dll文件中的內部函數,可以以命令行 的形式調用windows32位的動態鏈接庫。
同理,rundll.exe就是"執行16位的dll文件",調用的是16位的動態鏈接庫。我們通過 rundll32.exe執行指令來完成一些功能。


舉個例子

System.Diagnostics.Process.Start("rundll32.exe","user.exe,restartwindows");????? //系統重啟

命令
rundll32命令大全
命令列:rundll32.exe user.exe,restartwindows
功能: 系統重啟

命令列:rundll32.exe user.exe,exitwindows
功能: 關閉系統

命令列: rundll32.exe shell32.dll,Control_RunDLL
功能: 顯示控制面板

命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
功能: 顯示“控制面板-輔助選項-鍵盤”選項視窗

命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
功能: 顯示“控制面板-輔助選項-聲音”選項視窗

命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
功能: 顯示“控制面板-輔助選項-顯示”選項視窗

命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
功能: 顯示“控制面板-輔助選項-滑鼠”選項視窗

命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
功能: 顯示“控制面板-輔助選項-傳統”選項視窗

命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
功能: 執行“控制面板-添加新硬體”向導。?

命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
功能: 執行“控制面板-添加新印表機”向導。

命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
功能: 顯示 “控制面板-添加/刪除程式” 面板。

命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
功能: 顯示 “控制面板-添加/刪除程式-安裝/卸載” 面板。

命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
功能: 顯示 “控制面板-添加/刪除程式-安裝Windows” 面板。

命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
功能: 顯示 “控制面板-添加/刪除程式-啟動盤” 面板。

命令列: rundll32.exe syncui.dll,Briefcase_Create
功能: 在桌面上建立一個新的“我的公文包”。

命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
功能: 顯示復制軟碟視窗

命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
功能: 顯示“建立快捷方式”的對話框,所建立的快捷方式的位置由%1參數決定。

命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
功能: 顯示“日期與時間”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
功能: 顯示“時區”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
功能: 顯示 “控制面板-添加/刪除程式-啟動盤” 面板。

命令列: rundll32.exe syncui.dll,Briefcase_Create
功能: 在桌面上建立一個新的“我的公文包”。

命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
功能: 顯示復制軟碟視窗

命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
功能: 顯示“建立快捷方式”的對話框,所建立的快捷方式的位置由%1參數決定。

命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
功能: 顯示“日期與時間”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
功能: 顯示“時區”選項視窗。

命令列: rundll32.exe rnaui.dll,RnaDial [某個撥號連接的名稱]
功能: 顯示某個撥號連接的撥號視窗。如果已經撥號連接,則顯示目前的連接狀態的視窗。

命令列: rundll32.exe rnaui.dll,RnaWizard
功能: 顯示“新建撥號連接”向導的視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
功能: 顯示“顯示屬性-背景”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
功能: 顯示“顯示屬性-螢屏保護”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
功能: 顯示“顯示屬性-外觀”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
功能: 顯示顯示“顯示屬性-屬性”選項視窗。

命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
功能: 顯示Windows的“字體”檔案夾。?

命令列: rundll32.exe rnaui.dll,RnaDial [某個撥號連接的名稱]
功能: 顯示某個撥號連接的撥號視窗。如果已經撥號連接,則顯示目前的連接狀態的視窗。

命令列: rundll32.exe rnaui.dll,RnaWizard
功能: 顯示“新建撥號連接”向導的視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
功能: 顯示“顯示屬性-背景”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
功能: 顯示“顯示屬性-螢屏保護”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
功能: 顯示“顯示屬性-外觀”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
功能: 顯示顯示“顯示屬性-屬性”選項視窗。

命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
功能: 顯示Windows的“字體”檔案夾。

命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
功能: 同樣是顯示Windows的“字體”檔案夾。

命令列: rundll32.exe shell32.dll,SHFormatDrive
功能: 顯示格式化軟碟對話框。

命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
功能: 顯示“控制面板-游戲控制器-一般”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
功能: 顯示“控制面板-游戲控制器-進階”選項視窗。

命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文檔)
功能: 列印HTML文檔。

命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
功能: 顯示Microsoft Exchange一般選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
功能: 顯示“控制面板-滑鼠” 選項 。

命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
功能: 顯示 “控制面板-鍵盤屬性-速度”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
功能: 顯示 “控制面板-鍵盤屬性-語言”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
功能: 顯示Windows“印表機”檔案夾。

命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
功能: 顯示“控制面板-輸入法屬性-輸入法”選項視窗。?

命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
功能: 執行“添加新調制解調器”向導。

命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
功能: 顯示“控制面板-多媒體屬性-音頻”屬性頁。

命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
功能: 顯示“控制面板-多媒體屬性-視頻”屬性頁。

命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
功能: 顯示“控制面板-多媒體屬性-MIDI”屬性頁。

命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
功能: 顯示“控制面板-多媒體屬性-CD音樂”屬性頁。

命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
功能: 顯示“控制面板-多媒體屬性-設備”屬性頁。?

命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
功能: 顯示“控制面板-聲音”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
功能: 顯示“控制面板-網路”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
功能: 顯示ODBC32資料管理選項視窗。

命令列: rundll32.exe shell32.dll,OpenAs_RunDLL {drive:/path/filename}
功能: 顯示指定檔案(drive:/path/filename)的“打開方式”對話框。

命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
功能: 顯示“控制面板-密碼”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
功能: 顯示“控制面板-電源管理屬性”選項視窗。

命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
功能: 顯示Windows“印表機”檔案夾。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl?

@2)

命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0?
功能: 顯示“控制面板-區域設置屬性-區域設置”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
功能: 顯示“控制面板-區域設置屬性-數字”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
功能: 顯示“控制面板-區域設置屬性-貨幣”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
功能: 顯示“控制面板-區域設置屬性-時間”選項視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
功能: 顯示“控制面板-區域設置屬性-日期”選項視窗。

命令列: rundll32.exe desk.cpl,InstallScreenSaver [螢屏保護檔案名]
功能: 將指定的螢屏保護檔案設置為Windows的屏保,并顯示螢屏保護屬性視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
功能: 顯示“控制面板-系統屬性-傳統”屬性視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
功能: 顯示“控制面板-系統屬性-設備管理器”屬性視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
功能: 顯示“控制面板-系統屬性-硬體配置檔案”屬性視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
功能: 顯示“控制面板-系統屬性-性能”屬性視窗。

命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
功能: 顯示“撥號屬性”選項視窗

命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
功能: 顯示“桌面主題”選項面板

命令列: rundll32.exe shell32.dll,Control_RunDLL firewall.cpl
功能: 顯示“Windows防火墻"面板

命令列: rundll32.exe shell32.dll,Control_RunDLL NetSetup.cpl,@0,WNSW
功能: 顯示“無線網絡設置"面板

更多的命令請到這里下載:http://download.csdn.net/detail/czw2010/4530206

System.Diagnostics.Process.Start("notepad.exe");??????? -- 打開記事本

System.Diagnostics.Process.Start("calc.exe ");??????????????? -- 打開計算器

System.Diagnostics.Process.Start("regedit.exe ");?????????? -- 打開注冊表

System.Diagnostics.Process.Start("mspaint.exe ");??????? -- 打開畫圖板

System.Diagnostics.Process.Start("write.exe ");????????????? -- 打開寫字板

System.Diagnostics.Process.Start("mplayer2.exe ");??????? --打開播放器

System.Diagnostics.Process.Start("taskmgr.exe ");????????? --打開任務管理器

System.Diagnostics.Process.Start("eventvwr.exe ");????????? --打開事件查看器

System.Diagnostics.Process.Start("winmsd.exe ");?????????? --打開系統信息

System.Diagnostics.Process.Start("winver.exe ");????????????? --打開Wind

System.Diagnostics.Process.Start("regedit.exe ");?????????? -- 打開注冊表

System.Diagnostics.Process.Start("mspaint.exe ");??????? -- 打開畫圖板

System.Diagnostics.Process.Start("write.exe ");????????????? -- 打開寫字板

System.Diagnostics.Process.Start("mplayer2.exe ");??????? --打開播放器

System.Diagnostics.Process.Start("taskmgr.exe ");????????? --打開任務管理器

System.Diagnostics.Process.Start("eventvwr.exe ");????????? --打開事件查看器

System.Diagnostics.Process.Start("winmsd.exe ");?????????? --打開系統信息

System.Diagnostics.Process.Start("winver.exe ");????????????? --打開Windows版本信息

System.Diagnostics.Process.Start("mailto: "+ address);??? -- 發郵件

shutdown.exe:

參數:-s 關機?? -r重啟?? -f強行?? -t 時間??? -a 取消關機?? -l 注銷??? -i 顯示用戶界面

System.Diagnostics.Process.Start("shutdown.exe","-r");????????????? -- 關閉并重啟計算機

System.Diagnostics.Process.Start("shutdown.exe","-s -f");????????? -- 關閉計算機

System.Diagnostics.Process.Start("shutdown.exe","-s -f 30");???? -- 30s后關閉計算機

System.Diagnostics.Process.Start("shutdown.exe","-l");?????????????? --注銷計算機

System.Diagnostics.Process.Start("winver.exe ");????????????? --打開Windows版本信息

System.Diagnostics.Process.Start("mailto: "+ address);??? -- 發郵件

shutdown.exe:

參數:-s 關機?? -r重啟?? -f強行?? -t 時間??? -a 取消關機?? -l 注銷??? -i 顯示用戶界面

System.Diagnostics.Process.Start("shutdown.exe","-r");????????????? -- 關閉并重啟計算機

System.Diagnostics.Process.Start("shutdown.exe","-s -f");????????? -- 關閉計算機

System.Diagnostics.Process.Start("shutdown.exe","-s -f 30");???? -- 30s后關閉計算機

System.Diagnostics.Process.Start("shutdown.exe","-l");?????????????? --注銷計算機

System.Diagnostics.Process.Start("shutdown.exe","-a");????????????? --撤銷關閉計算機

SpecialFolder枚舉成員:

成員名稱 ?? ?說明
ApplicationData ?? ?目錄,它用作當前漫游用戶的應用程序特定數據的公共儲存庫。

漫游用戶在網絡上的多臺計算機上工作。漫游用戶的配置文件保存在網絡服務器上,當用戶登錄

到某個系統上時,它會加載到該系統。
CommonApplicationData ?? ?目錄,它用作所有用戶使用的應用程序特定數據的公共儲存庫。
CommonProgramFiles ?? ?用于應用程序間共享的組件的目錄。
Cookies ?? ?用作 Internet Cookie 的公共儲存庫的目錄。
Desktop ?? ?邏輯桌面,而不是物理文件系統位置。
DesktopDirectory ?? ?用于物理上存儲桌面上的文件對象的目錄。

不應將此目錄與桌面文件夾本身混淆,后者是虛擬文件夾。
Favorites ?? ?用作用戶收藏夾項的公共儲存庫的目錄。
History ?? ?用作 Internet 歷史記錄項的公共儲存庫的目錄。
InternetCache ?? ?用作 Internet 臨時文件的公共儲存庫的目錄。
LocalApplicationData ?? ?目錄,它用作當前非漫游用戶使用的應用程序特定數據的公共儲

存庫。
MyComputer ?? ?“我的電腦”文件夾。
注意

由于沒有為“我的電腦”文件夾定義路徑,因此 MyComputer 常數將始終生成空字符串 ("")。
MyDocuments ?? ?“我的電腦”文件夾。
MyMusic ?? ?“My Music”文件夾。
MyPictures ?? ?“My Pictures”文件夾。
Personal ?? ?用作文檔的公共儲存庫的目錄。
ProgramFiles ?? ?“Program files”目錄。
Programs ?? ?包含用戶程序組的目錄。
Recent ?? ?包含用戶最近使用過的文檔的目錄。
SendTo ?? ?包含“發送”菜單項的目錄。
StartMenu ?? ?包含“開始”菜單項的目錄。
Startup ?? ?對應于用戶的“啟動”程序組的目錄。

每當用戶登錄、啟動 Windows NT 或更高版本或啟動 Windows 98 時,系統均會啟動這些程序


System ?? ?“System”目錄。
Templates ?? ?用作文檔模板的公共儲存庫的目錄。

通過Environment.GetFolderPath(Environment.SpecialFolder.XXXXX);我們可以輕松地獲得系

統特殊文件夾的具體路徑,然后用Process.Start()方法打開該文件夾。

例如:

System.Diagnostics.Process.Start(Environment.GetFolderPath

(Environment.SpecialFolder.System));?? //打開系統文件夾(System32文件夾)

?[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
??????? private static extern int FindWindow(string ClassName, string WindowName);

[System.Runtime.InteropServices.DllImport("user32.dll")]
??????? private static extern int ShowWindow(int handle, int cmdShow);

[System.Runtime.InteropServices.DllImport("winmm.dll", EntryPoint = "mciSendString",?

CharSet = System.Runtime.InteropServices.CharSet.Auto)]
??????? private static extern int mciSendString(string lpstrCommand, string lpstrReturnstring,?

int uReturnLength, int hwndCallback);

??????? private const int SW_HIDE = 0;//API參數表示隱藏窗
private const int SW_SHOW = 5;//API參數表示用當前的大小和位置顯示窗口

??????? ShowWindow(FindWindow("Shell_TrayWnd", null), SW_HIDE);???????? -- 隱藏隱藏任務欄

??????? ShowWindow(FindWindow("Shell_TrayWnd", null), SW_SHOW);????? --? 顯示任務欄

??????? mciSendString("set CDAudio door open", null, 127, 0);?????? -- 彈出光驅

??????? mciSendString("set CDAudio door closed", null, 127, 0);???? --關閉光驅

-------------------------------------------------------------------------------------------------------------------------------------------------------

到現在為止,關于使用編程語言讀寫文件的功能已經越來越強大,使用編程語言根據特定的條件生成腳本文件之后需要自動化

執行生成的腳本文件應該怎么做

本文主要是介紹在.Net中System.Diagnostics命名空間下Process類和ProcessStartInfo類的使用

用于啟動一個外部程序所使用的類是Process,至于ProcessStartInfo類只是用來傳入Process類所需要的參數,

個人理解是有點類似于適配器的操作,不知道是否正確。

最簡單的用于啟動一個應用程序

[csharp]?view plain?copy
  1. Process?_proc?=?new?Process();??
  2. ProcessStartInfo?_procStartInfo?=?new?ProcessStartInfo("IExplore.exe","http://www.baidu.com");??
  3. _proc.StartInfo?=?_procStartInfo;??
  4. _proc.Start();??
以上就是簡單的使用IE瀏覽器打開 百度首頁 的代碼,以上代碼等價于
[csharp]?view plain?copy
  1. <span?style="white-space:pre">????</span>Process?_proc?=?new?Process();??
  2. ????????_proc.StartInfo.FileName?=?"IExplore.exe";??
  3. ????????_proc.StartInfo.Arguments?=?"http://www.baidu.com";??
  4. ????????_proc.Start();??
可以通過直接給Process對象的屬性賦值而達到相同的效果。

當需要執行一個腳本,比如執行windows系統下的.bat文件該怎么做

我們現在D盤目錄下建立一個bat文件,寫上內容

[plain]?view plain?copy
  1. <span?style="white-space:pre">????</span>xcopy?/y?C:\folder1\1.txt?C:\folder2\??
  2. <span?style="white-space:pre">????</span>ping?localhost?-n?3?>nul??
  3. <span?style="white-space:pre">????</span>xcopy?/y?C:\folder1\2.txt?C:\folder2\??
  4. <span?style="white-space:pre">????</span>ping?localhost?-n?3?>nul??
  5. <span?style="white-space:pre">????</span>xcopy?/y?C:\folder1\3.txt?C:\folder2\??
腳本內容是把folder1的1.txt,2.txt,3.txt文件賦值到folder2下,在每個賦值命令的中間有ping命令,這是一個用于使一個腳本文件暫定一定時間的比較經典做法/y參數作用是當folder2文件夾下有同名的文件時,不提示而直接覆蓋源文件,如果不加上這個參數當有同名的文件時會提示是否覆蓋,此處暫停的時間為3秒,>nul 作用是只執行命令而不出現消息內容

新建一個C#文件,寫上代碼:

[csharp]?view plain?copy
  1. Process?_proc?=?new?Process();??
  2. ?ProcessStartInfo?_procStartInfo?=?new?ProcessStartInfo();??
  3. ?_procStartInfo.FileName?=?@"C:/Test.bat";??
  4. ?_procStartInfo.CreateNoWindow?=?true;//表示是否啟動新的窗口來執行這個腳本,默認值為false,既不會開啟新的窗口 ?
  5. ?_procStartInfo.UseShellExecute?=?false;//是否使用外殼來運行程序,設置為true時運行程序彈出新的cmd窗口執行腳本文件
  6. ?_procStartInfo.RedirectStandardOutput?=?true;//獲取對象的標準輸出流StreamReader對象,用于輸出腳本的返回內容 ?
  7. ?_proc.StartInfo?=?_procStartInfo;??
  8. ?_proc.Start();??
  9. ?_proc.WaitForExit(1000);??
  10. ?_proc.Kill();??
  11. ?using?(StreamReader?sr?=?_proc.StandardOutput)?
  12. ?{??
  13. ?????String?str?=?sr.ReadLine();??
  14. ?????while?(null?!=?str)?
  15. ? ? {??
  16. ?????????Console.WriteLine(str);??
  17. ?????????str?=?sr.ReadLine();??
  18. ?????}??
  19. ?}??
  20. ?if?(_proc.HasExited)//運行完之后Process的HasExited屬性可以判斷腳本是否運行完畢 ?
  21. ?????_proc.Close();??
此處提到三個屬性:

CreateNoWindow:表示是否啟動新的窗口來執行這個腳本,默認值為false,既不會開啟新的窗口,當main線程運行完時,

啟動的控制臺無法結束,需要等待腳本執行完畢才能繼續,當手動設置為true,即腳本在后臺新窗口執行(本人目前沒有找

到顯示該新窗口的方法,如有悉者,敬請告知),main線程運行結束之后不必等待腳本執行完畢即可正常關閉,

此時腳本在后臺繼續執行直至自動結束,往下看可以看到Process類的成員方法WaitForExit(int time)和Kill()方法,

WaitForExit(int time)用于在time(毫秒)時間內等待腳本執行,當超過這個時間,main繼續往下執行,

腳本后臺運行直至結束,如果不添加time參數,則無休止等待直至腳本運行完畢,Kill()方法用于停止該腳本的運行。

由前面可以看出腳本總共需要至少6秒鐘的時間,此時WaitForExit()參數設置為1000,則一秒之后,main函數不再等待腳本執行,

此時查看folder2文件夾,發現復制了一個1.txt文件,然后運行kill()方法,腳本直接被終止,如果注釋Kill()方法,

則腳本會自動運行6秒之后自動停止。


UseShellExecute:是否使用外殼來運行程序,設置為true時運行程序會彈出新的cmd窗口執行腳本文件。

當設置為false時則不使用外殼程序來運行。默認值為true

RedirectStandardOutput:獲取對象的標準輸出流StreamReader對象,用于輸出腳本的返回內容,當該屬性設置為true,

則UseShellExecute屬性必須設置為false,當加上外殼程序運行時,彈出新的窗口運行內容就是StandardOutput的讀取內容。

除此之外還有RedirectStandardInput屬性,可以用于默認人為輸入命令。

運行完之后Process的HasExited屬性可以判斷腳本是否運行完畢。

至此,本人對Process類的基本運用的拙見如上所述,有問題可以多多交流。

晚輩第一次發技術博客,請大家多多擔待,如有不妥之處,敬請斧正。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458468.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458468.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sublime 的中文亂碼問題

Sublime Text 是現在最受歡迎的文本編輯器&#xff0c;沒有之一。它非常簡潔&#xff0c;而且對各種代碼的高亮顯示很美觀。但是&#xff0c;它默認不支持 GBK、Shift-JIS 等中文、日本編碼格式&#xff0c;故打開此類文件會出現亂碼。 安裝 Package Control 首先要安裝一個包控…

蘋果應用上架遇到的問題(2017年4月27日)

在更新app store的時候報&#xff08;如圖&#xff09;&#xff1a; ERROR ITMS-90086: "Missing 64-bit support. iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK or later. We recommend using the default "S…

工作者對象HttpWorkerRequest

在ASP.NET中&#xff0c;用于處理的請求&#xff0c;需要封裝為HttpWorkerRequest類型的對象。該類為抽象類&#xff0c;定義在命名空間System.Web下。 #region Assembly System.Web.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFr…

C#輸入輸出重定向

當 Process 將文本寫入其標準流中時&#xff0c;通常將在控制臺上顯示該文本。通過重定向 StandardOutput 流&#xff0c;可以操作或取消進程的輸出。例如&#xff0c;可以篩選文本、用不同方式將其格式化&#xff0c;也可以將輸出同時寫入控制臺和指定的日志文件中。有兩種方式…

C語言筆試常考知識點

1. const 關鍵字 a) const int a; b) int const a; c) const int *a; d) int * const a; e) int const * const a; 解析&#xff1a; a) a為一個int型變量&#xff0c;在它被定義時就應當對其初始化&#xff0c;因為以后就沒有機會再去改變它了。 b) 與 a) 是一個意思&a…

蘋果應用上架,一些信息的勾選(2017年4月27日)

1、分級的各種選項的選擇全部選否 &#xff08;我們公司是醫療相關的app&#xff0c;醫療的選項也是選擇的否&#xff09; 2、

jsp頁面路徑問題

jsp路徑默認不是項目跟路徑 一、 <% page language"java" import"java.util.*" pageEncoding"utf-8"%> <% String path request.getContextPath(); String basePath request.getScheme() "://" request.getServerName() …

C# 線程池ThreadPool

什么是線程池&#xff1f;為什么要用線程池&#xff1f;怎么用線程池&#xff1f; 1. 什么是線程池&#xff1f;.NET Framework的ThreadPool類提供一個線程池&#xff0c;該線程池可用于執行任務、發送工作項、處理異步 I/O、代表其他線程等待以及處理計時器。那么什么是線程池…

蘋果應用上架,圖片的要求(2017年4月27日)

看這個提示應該就明白了吧。 哈哈&#xff0c;我還是自己再說一遍加深一下印象吧&#xff1a;如果應用在各個尺寸iphone屏幕上面外觀一樣&#xff0c;就只準備5.5英寸的圖就可以了&#xff1b;如果有所不同&#xff0c;就按照實際情況&#xff0c;準備不同屏幕尺寸的圖片即可。…

jQuery操作checkbox

2012歐洲杯"死亡之組"小組出線的國家隊是&#xff1a;<br> <inputtype"checkbox"name"nation"value"Germany">德國 <inputtype"checkbox"name"nation"value"Denmark">丹麥 <input…

android Instrumentation 轉載

Android提供了一系列強大的測試工具&#xff0c;它針對Android的環境&#xff0c;擴展了業內標準的JUnit測試框架。盡管你可以使用JUnit測試Android工程&#xff0c;但Android工具允許你為應用程序的各個方面進行更為復雜的測試&#xff0c;包括單元層面及框架層面。Android測試…

Linker command failed with exit code 1(use -v to see invocation)

Linker command failed with exit code 1(use -v to see invocation) 出現這個問題的原因是&#xff1a;工程當中存在相同的文件&#xff0c;找到該文件將其刪除即可

【C#學習筆記】使用C#中的Dispatcher

form:https://www.jianshu.com/p/0714fc755988之前的文章說過了如何使用BackgroundWorker&#xff0c;今天要說的是WPF程序員處理多線程的另外一個方式 - Dispatcher當我們打開一個WPF應用程序即開啟了一個進程&#xff0c;該進程中至少包含兩個線程。一個線程用于處理呈現&…

流媒體 關鍵詞解釋

流媒體 流媒體是指采用流式傳輸的方式在網上播放的媒體格式, 是邊傳邊播的媒體&#xff0c;是多媒體的一種! 然后就是大家需要了解的幾個關鍵詞 幀:視頻是由很多連續圖像組成, 每一幀就代表一幅靜止的圖像 GOP:&#xff08;Group of Pictures&#xff09;畫面組&#xff0c;一個…

[C#] 等待啟動的進程執行完畢

from: https://www.cnblogs.com/qqhfeng/p/4769524.html有能有時候我們啟動了一個進程&#xff0c;必須等到此進程執行完畢&#xff0c;或是&#xff0c;一段時間&#xff0c; 關閉進程后再繼續往下走。Example sample1 等待應用程序執行完畢 //等待應用程序執行完畢private vo…

html body標簽

table table 屬性&#xff1a; border &#xff1a;定義表格的邊框寬度&#xff0c;默認為0&#xff0c;即無邊框。<table border"1"> title &#xff1a;表格的提示信息&#xff0c;當鼠標移到表格上方時&#xff0c;所提示的信息。 cellpadding &#xff1a;…

創建字符串的方法

//創建一個字符串常量 NSString *str"字符串"; //創建一個空的字符對象 NSString *str1[[NSString alloc]init];//實例方法 NSString *str2[NSString string];//類方法 //快速創建一個字符串 NSString *str3[[NSString alloc]initWithString:"字符串"];//實…

DataReceivedEventHandler 委托 接收調用執行進程返回數據

https://msdn.microsoft.com/zh-cn/library/azure/system.diagnostics.datareceivedeventhandler備注創建 DataReceivedEventHandler 委托時&#xff0c;需要標識將處理該事件的方法。 若要將事件與事件處理程序關聯&#xff0c;請將該委托的一個實例添加到事件中。 除非移除了…

coreData

CoreData使用 創建步驟流程 第一步先創建.xcdatamodeld文件&#xff08;New File -> iOS -> Core Data ->Data Model&#xff09; 屏幕快照 2016-07-07 下午10.40.16.png名字雖然可以任意取&#xff0c;但最好還是取和自己存儲數據庫名字一樣的名字。這樣可讀性更高些…

命令行下mysql新建用戶及分配權限

創建用戶&#xff1a; CREATE USER usernamehost IDENTIFIED BY password; 說明:username – 你將創建的用戶名, host – 指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost, 如 果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%. password – 該用戶的登陸密…