記錄 使用PsExec啟動System權限的WPF 程序
一、前提
在做桌面應用的時候,相信我們都會遇到使用System權限打開某些應用,首先我們想到的是使用windows服務的方式去打開某些應用,但是使用windows服務去打開某些應用,都會遇到一些帶有UI界面的應用打不開,或者出現奇奇怪怪的的問題。今天主要介紹一下使用PsExec啟動帶有System權限的WPF應用程序。
二、介紹PsExec
PsExec - Sysinternals | Microsoft Learn
簡介
Telnet 等實用工具和遠程控制程序(如 Symantec 的 PC Anywhere)可以讓你在遠程系統上執行程序,但它們的設置可能很麻煩,需要你在想要訪問的遠程系統上安裝客戶端軟件。 PsExec 是一種輕量級 telnet 替代品,可讓你在其他系統上執行進程,并為控制臺應用程序提供完整交互性,而無需手動安裝客戶端軟件。 PsExec 最強大的用途包括在遠程系統上啟動交互式命令提示符,以及 IpConfig 等遠程啟用工具,否則無法顯示有關遠程系統的信息。
注意:某些防病毒掃描程序報告一個或多個工具感染了“遠程管理員”病毒。 PsTools 均不包含病毒,但它們已被病毒使用,這就是它們觸發病毒通知的原因。
安裝
只需將 PsExec 復制到可執行文件路徑即可。 鍵入“psexec”會顯示其使用語法。
使用 PsExec
請參閱 2004 年 7 月期 Windows IT 專業人員雜志中 Mark 的文章,其中介紹了 PsExec 的高級用法。
用法:
psexec [\\\\computer[,computer2[,...] | @file]][-u user [-p psswd]][-n s][-r servicename][-h][-l][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory][-d][-<priority>][-g n][-a n,n,...][-accepteula][-nobanner] cmd [arguments]
| 參數 | 說明 |
|---|---|
| -a | 使用逗號分隔應用程序可以在上面運行的處理器,其中 1 是編號最低的 CPU。 例如,若要在 CPU 2 和 CPU 4 上運行應用程序,請輸入:“-a 2,4” |
| -c | 將指定的可執行文件復制到遠程系統以執行。 如果省略此選項,則應用程序必須位于遠程系統上的系統路徑中。 |
| -d | 不要等待進程終止(非交互式)。 |
| -e | 不要加載指定帳戶的配置文件。 |
| -f | 復制指定的程序,即使文件已存在于遠程系統上。 |
| -i | 運行程序,使其與遠程系統上指定會話的桌面進行交互。 如果未指定會話,則進程在控制臺會話中運行。 當嘗試以交互方式運行控制臺應用程序(使用重定向的標準 IO)時,需要此標志。 |
| -h | 如果目標系統為 Vista 或更高版本,則使用帳戶的提升令牌(如果可用)運行進程。 |
| -l | 以受限用戶身份運行進程(刪除 Administrators 組,并僅允許分配給 Users 組的權限)。 在 Windows Vista 上,進程以低完整性運行。 |
| -n | 指定連接到遠程計算機的超時時間(以秒為單位)。 |
| -p | 指定用戶名的可選密碼。 如果省略此內容,系統將提示你輸入隱藏密碼。 |
| -r | 指定要創建或與之交互的遠程服務的名稱。 |
| -s | 在系統帳戶中運行遠程進程。 |
| -u | 指定登錄遠程計算機的可選用戶名。 |
| -v | 僅當指定文件的版本號較高或比遠程系統上的版本號新時,才復制指定文件。 |
| -w | 設置進程的工作目錄(相對于遠程計算機)。 |
| -x | 在 Winlogon 安全桌面上顯示 UI(僅限本地系統)。 |
| -priority | 指定 -low、-belownormal、-abovenormal、-high 或 -realtime,以便以不同的優先級運行進程。 使用 -background 在 Vista 上以低內存和 I/O 優先級運行。 |
| computer | 指示 PsExec 在指定的遠程計算機上運行應用程序。 如果省略計算機名稱,PsExec 將在本地系統上運行應用程序,如果指定通配符 (\\*),PsExec 將在當前域中的所有計算機上運行命令。 |
| @file | PsExec 將在文件中列出的每臺計算機上執行命令。 |
| cmd | 要執行的應用程序的名稱。 |
| arguments | 要傳遞的參數(請注意,文件路徑必須是目標系統上的絕對路徑)。 |
| -accepteula | 此標志禁止顯示許可證對話框。 |
| -nobanner | 此標志會消除啟動橫幅和版權消息。 |
可以用引號將名稱中有空格的應用程序括起來,例如
psexec \\marklap "c:\\long name app.exe"
輸入僅在你按 Enter 鍵時傳遞到遠程系統。 鍵入 Ctrl-C 將終止遠程進程。
如果省略用戶名,該進程將在遠程系統上的帳戶上下文中運行,但無權訪問網絡資源(因為它正在模擬)。 如果遠程進程需要訪問網絡資源或在不同的帳戶中運行,請在 Domain\User 語法中指定有效的用戶名。 請注意,密碼和命令在傳輸到遠程系統時會加密。
PsExec 返回的錯誤代碼特定于所執行的應用程序,而不是 PsExec。
示例
我寫的這篇文章介紹了 PsExec 的工作原理,并提供了有關如何使用它的提示:
以下命令在 \\marklap 上啟動交互式命令提示符:
psexec -i \\marklap cmd
此命令使用 /all 開關在遠程系統上執行 IpConfig,并在本地顯示生成的輸出:
psexec -i \\marklap ipconfig /all
此命令將程序 test.exe 復制到遠程系統,以交互方式執行:
psexec -i \\marklap -c test.exe
指定已安裝在遠程系統上的程序的完整路徑(如果它不在系統的路徑上):
psexec -i \\marklap c:\bin\test.exe
在系統帳戶中以交互方式運行 Regedit,以查看 SAM 和安全密鑰的內容:
psexec -i -d -s c:\windows\regedit.exe
若要以受限用戶權限運行 Internet Explorer,請使用以下命令:
psexec -l -d "c:\program files\internet explorer\iexplore.exe"
下載 PsTools (5 MB)
PSTools
PsExec 是 Sysinternals 命令行工具日益增多的工具包的一部分,可幫助管理名為 PsTools 的本地和遠程系統。
運行平臺:
- 客戶端:Windows 8.1 及更高版本。
- 服務器:Windows Server 2012 及更高版本。
三、使用PsExec
1、將下載下來的PsExec 復制到 “C:\Windows\System32”

2、為了方便使用,把PsExec添加到系統的環境變量下:

3、創建一個普通的WPF 程序,編譯后的路徑為:“E:\Code\wutyDemo\TestSystemWindow\bin\Debug\net8.0-windows\\TestSystemWindow.exe”

4、使用管理員身份運行cmd,執行命令:
PsExec.exe -i -d -s "E:\Code\wutyDemo\TestSystemWindow\bin\Debug\net8.0-windows\TestSystemWindow.exe"

5、任務管理器的觀察開啟的應用權限如下:

參考資料:
PsExec - Sysinternals | Microsoft Learn
【Windows系統】使用psexec提升權限_windows 提升exe 應用的權限-CSDN博客

浙公網安備 33010602011771號