惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
爱范儿
爱范儿
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
B
Blog RSS Feed
博客园 - 聂微东
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
WordPress大学
WordPress大学
Scott Helme
Scott Helme
AI
AI
S
Security Affairs
T
Threat Research - Cisco Blogs
M
MIT News - Artificial intelligence
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
AWS News Blog
AWS News Blog
T
Threatpost
Cyberwarzone
Cyberwarzone
www.infosecurity-magazine.com
www.infosecurity-magazine.com
U
Unit 42
V
Vulnerabilities – Threatpost
J
Java Code Geeks
博客园 - Franky
月光博客
月光博客
Blog — PlanetScale
Blog — PlanetScale
NISL@THU
NISL@THU
D
Docker
小众软件
小众软件
N
News and Events Feed by Topic
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
A
Arctic Wolf
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
Forbes - Security
Forbes - Security
量子位
PCI Perspectives
PCI Perspectives
美团技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
I
InfoQ
Security Archives - TechRepublic
Security Archives - TechRepublic
有赞技术团队
有赞技术团队
腾讯CDC
P
Proofpoint News Feed
S
Security @ Cisco Blogs
G
Google Developers Blog
C
Cisco Blogs

博客园 - wuty007

C# 范围运算符 C# 调用WGC 实现桌面屏幕的捕获 完善基于WPF开发的标尺控件(含实例代码) C# 依赖注入 Microsoft.Extensions.DependencyInjection 实现 控制反转(IOC) C# 获取Windows系统的设备名称 记录 Windows系统开启hyper-v ,部分端口被保留,导致端口不能使用而报错的问题 WPF 调用 Win32的SetWindowDisplayAffinity 函数 实现捕获屏幕时,过滤指定的窗口 记录WPF 在清单列表设置了UIACESS为true,没有签名的报错“从服务器返回了一个参照” WPF 的ListBox 去除默认的Item项的 鼠标hover的背景颜色 WPF 调用 ChangeWindowMessageFilterEx 修改指定窗口 (UIPI) 消息筛选器的用户界面特权隔离 记录一下 WPF进程 SendMessage 发送窗口消息进行进程间通信,存在进程权限无法接受消息的问题 记录 命令行的 findstr 的使用 排查Windows 下的内存使用率过高,但是任务管理器看不到进程 Everything 支持 多实例 运行 指定应用 在 控制面板或者 设置的安装应用 置灰或隐藏卸载按钮 WPF 通过RawInput 获取 系统全局触摸事件 C# 定时任务 Quartz.NET 的使用 记录一下Windows系统下的命令行参数的字符个数限制 WPF 实现支持动态调整高度的文本显示控件
记录 使用PsExec启动System权限的WPF 程序
wuty007 · 2025-09-10 · via 博客园 - wuty007

一、前提

在做桌面应用的时候,相信我们都会遇到使用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 的高级用法。

用法:

参数说明
-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 上启动交互式命令提示符:

此命令使用 /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”

image

 2、为了方便使用,把PsExec添加到系统的环境变量下:

image

 3、创建一个普通的WPF 程序,编译后的路径为:“E:\Code\wutyDemo\TestSystemWindow\bin\Debug\net8.0-windows\\TestSystemWindow.exe

image

 4、使用管理员身份运行cmd,执行命令:

PsExec.exe -i -d -s "E:\Code\wutyDemo\TestSystemWindow\bin\Debug\net8.0-windows\TestSystemWindow.exe"

image

 5、任务管理器的观察开启的应用权限如下:

image

参考资料:

PsExec - Sysinternals | Microsoft Learn

【Windows系统】使用psexec提升权限_windows 提升exe 应用的权限-CSDN博客