轉自csdn的yangw150,zhao4zhong1
轉自http://www.cnblogs.com/del/archive/2008/02/13/1068229.html
http://blog.csdn.net/go121015603/article/details/41870707
win7下,我想執行net user administrator /active:yes這樣一條指令,用system()函數執行時返回錯誤,返回錯誤是“發生系統錯誤 5 拒絕訪問”,原來是沒有管理員權限,用手動右鍵點擊cmd.exe,選擇使用管理員權限運行就ok了,但在代碼里如何能模擬管理員權限的cmd來運行一條指令呢?
ShellExecuteA(0,"runas","cmd","","",1);
這樣是以管理員權限打開了cmd窗口
ShellExecute(0,"runas", LPCSTR("cmd.exe"),LPCSTR("/c net user administrator /active:yes"),"",SW_HIDE);
ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定動作, 譬如: open、print} FileName: PChar; {指定要打開的文件或程序} Parameters: PChar; {給要打開的程序指定參數; 如果打開的是文件這里應該是 nil} Directory: PChar; {缺省目錄} ShowCmd: Integer {打開選項} ): HINST; {執行成功會返回應用程序句柄; 如果這個值 <= 32, 表示執行錯誤} //返回值可能的錯誤有: = 0 {內存不足} ERROR_FILE_NOT_FOUND = 2; {文件名錯誤} ERROR_PATH_NOT_FOUND = 3; {路徑名錯誤} ERROR_BAD_FORMAT = 11; {EXE 文件無效} SE_ERR_SHARE = 26; {發生共享錯誤} SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或無效} SE_ERR_DDETIMEOUT = 28; {超時} SE_ERR_DDEFAIL = 29; {DDE 事務失敗} SE_ERR_DDEBUSY = 30; {正在處理其他 DDE 事務而不能完成該 DDE 事務} SE_ERR_NOASSOC = 31; {沒有相關聯的應用程序} //ShowCmd 參數可選值: SW_HIDE = 0; {隱藏} SW_SHOWNORMAL = 1; {用最近的大小和位置顯示, 激活} SW_NORMAL = 1; {同 SW_SHOWNORMAL} SW_SHOWMINIMIZED = 2; {最小化, 激活} SW_SHOWMAXIMIZED = 3; {最大化, 激活} SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED} SW_SHOWNOACTIVATE = 4; {用最近的大小和位置顯示, 不激活} SW_SHOW = 5; {同 SW_SHOWNORMAL} SW_MINIMIZE = 6; {最小化, 不激活} SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE} SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE} SW_RESTORE = 9; {同 SW_SHOWNORMAL} SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL} SW_MAX = 10; {同 SW_SHOWNORMAL}
1、如果命令中的路徑包含空格,要把路徑去掉頭尾用雙引號包含起來。
例:strPath = “”D:\\\"te st\\\"test.exe;(用“\”進行字符轉義)
2、用變量傳命令的時候,要在命令字符開始加上"/c",不然命令不會執行。
例:strCommand = "/c " + "date";
ShellExecute(NULL, "open", "cmd", strCommand, NULL, SW_SHOW);
3、用SW_HIDE使cmd窗口靜默執行
例:ShellExecute(NULL, "open", "cmd", strCommand, NULL, SW_HIDE);
4、命令行執行結果可以使用">"來保存到文件。
例:ShellExecute(NULL, "open", "cmd", "/c date >D:\\test.txt", NULL, SW_HIDE);
5、通過對比輸出文件進行結果分析。
6、strCommand不支持直接使用..\,要使用相對路徑可以用tempdir來實現。
例:假設text.txt在test.exe的上一層目錄中,ShellExecute(NULL, "open", "cmd", "/c D:\\test\\test.exe "tempdir\\..\\..\\text.txt >D:\\test.txt", NULL, SW_HIDE);