如何在程序里模擬在cmd里用管理員權限運行一條指令


轉自csdn的yangw150zhao4zhong1

轉自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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM