将所发布的WinFrom程序以管理员身份运行

C#程序在操作系统中执行某些任务时需要特定的权限才正常进行,例如将文件夹对特定的账号开放读写权限,如果程序的运行身份不高,那么会抛出异常:该进程不具有执行此操作所需的“SeSecurityPrivilege”特权,解决方案就是提升程序的运行身份,比如以管理员身份运行该程序。下面是具体操作方式:

右键所发布的WinForm程序安装文件“setup.exe”->以管理员身份运行->安装该程序

安装完之后,再在任务管理器里找到该程序,右键程序进程->属性->兼容性->以管理员身份运行

(还有其他方法可以使得所开发的程序以管理员身份运行,例如可以在VS发布WinForm程序时作些配置,使得在发布后安装时要求以管理员身份运行)

转载于:https://www.cnblogs.com/Arlar/p/7220551.html

Windows API编程中,调用`NtUserCreateDesktopEx`函数需要通过头文件`ntddk.h`或`winuser.h`引入该函数声明,并使用` ZwCreateThread`等系统调用来间接执行,因为`NtUser*`函数通常是内核模式下的,而通常的应用程序并不直接运行在内核模式。 以下是调用`NtUserCreateDesktopEx`的基本步骤: 1. 包含必要的头文件: ```cpp #include <ntddk.h> #include <winuser.h> ``` 2. 使用合适的权限(例如,需要`SeSecurityPrivilege`特权)打开设备上下文(Device Context,DC): ```cpp NTSTATUS status; HANDLE desktopHandle = NULL; PSECURITY_QUALITY_OF_SERVICE qos = NULL; ULONG attributes = DESKTOP_VISIBLE | ...; // 参考所需属性 qos = (PSECURITY_QUALITY_OF_SERVICE) kzalloc(sizeof(*qos)); if (!qos) { // 处理内存分配失败 } status = ZwCreateDesiredObject(&desktopHandle, ObjectTypeDesktop, SeSecurityPrivilege, FALSE, // 创建一个新的桌面 NULL, // 安全描述符 &attributes, desktopHandle); if (NT_SUCCESS(status)) { // 操作成功,可以继续创建桌面 } else { // 处理错误 ZwClose(desktopHandle); } ``` 3. 调用`NtUserCreateDesktopEx`函数创建新桌面: ```cpp LPCDESKTOP_INFOEX desktopInfo = NULL; ... // 初始化desktopInfo结构体,包含名称、安全信息等参数 status = ZwCreateDesktopEx( desktopName, // 新桌面的名称 ObjectTypeDesktop, // 对象类型 desktopHandle, // 父级对象句柄 NULL, // 环境块句柄(如果不需要) desktopInfo, // 桌面详细信息 ...); // 其他创建选项 if (NT_SUCCESS(status)) { // 成功创建了桌面 } else { // 处理错误 ZwDeleteObjectAttributes(desktopHandle, NULL, NULL); } ``` 4. 释放资源: ```cpp kzfree(qos); ZwClose(desktopHandle); if (status != STATUS_SUCCESS) { // 错误处理 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值