我创建了一个 Windows 服务,它在 Windows 启动时运行一个程序,但是使用这个解决方案,该程序在没有管理员权限的情况下运行。但是,如果我通过单击“开始”菜单上的程序快捷方式运行该程序,它将以管理员权限运行
我用这个代码来运行程序:
ApplicationLoader.PROCESS_INFORMATION procInfo;
ApplicationLoader.StartProcessAndBypassUAC(program_name, out procInfo);
Run Code Online (Sandbox Code Playgroud)
那么如何以管理员权限运行这个程序呢?谢谢
大家早,
这个问题似乎已经被问过几次了,但是我找不到它是否真正可行。我已经张贴在这里
没有回复-让我们尝试在这里问别人。
我的目标是在当前用户上下文中(仅当它们在本地管理员组中)从服务启动提升的进程(作为管理员)。
我可以毫无问题地获得“当前用户”令牌,但无法获得该帐户的辅助/管理员令牌!
我已经阅读了很多论坛,但无法使其正常工作(开始认为这样做不可行)。
我目前的方法:
WTSGetActiveConsoleSessionId -获取活动会话IDWTSQueryUserToken -获取会话ID的用户令牌OpenProcess -登录用户的explorer.exe的进程句柄OpenProcessToken -获取访问令牌的句柄LookupPrivilegeValue -SE_DEBUG,以确认我们可以调整令牌权利DuplicateTokenEx -用户令牌SetTokenInformationAdjustTokenPrivilegesCreateEnvironmentBlock -在中运行新流程CreateProcessAsUser -希望在提升的用户上下文中生成该过程(不发生-标准用户上下文)请查看下面的代码-抱歉,它很杂乱,需要整理并且所有句柄都已关闭。目前,这只是实验性代码。
public static bool CreateProcessInConsoleSession(String CommandLine, bool bElevate)
{
PROCESS_INFORMATION pi;
bool isadmin = IsUserAnAdmin();
bool bResult = false;
uint dwSessionId, winlogonPid = 0;
IntPtr hUserToken = IntPtr.Zero, hUserTokenDup = IntPtr.Zero,
hPToken = IntPtr.Zero, hProcess = IntPtr.Zero;
Debug.Print("CreateProcessInConsoleSession");
// Log the client on to the local computer.
dwSessionId = WTSGetActiveConsoleSessionId();
// Find the …Run Code Online (Sandbox Code Playgroud)