相关疑难解决方法(0)

如何从具有管理员权限的 Windows 服务运行程序

我创建了一个 Windows 服务,它在 Windows 启动时运行一个程序,但是使用这个解决方案,该程序在没有管理员权限的情况下运行。但是,如果我通过单击“开始”菜单上的程序快捷方式运行该程序,它将以管理员权限运行

我用这个代码来运行程序:

ApplicationLoader.PROCESS_INFORMATION procInfo;

ApplicationLoader.StartProcessAndBypassUAC(program_name, out procInfo);
Run Code Online (Sandbox Code Playgroud)

那么如何以管理员权限运行这个程序呢?谢谢

windows-services

6
推荐指数
1
解决办法
6万
查看次数

从会话0(服务)启动提升的用户流程

大家早,

这个问题似乎已经被问过几次了,但是我找不到它是否真正可行。我已经张贴在这里

没有回复-让我们尝试在这里问别人。

我的目标是在当前用户上下文中(仅当它们在本地管理员组中)从服务启动提升的进程(作为管理员)。

我可以毫无问题地获得“当前用户”令牌,但无法获得该帐户的辅助/管理员令牌!

我已经阅读了很多论坛,但无法使其正常工作(开始认为这样做不可行)。

我目前的方法:

  • WTSGetActiveConsoleSessionId -获取活动会话ID
  • WTSQueryUserToken -获取会话ID的用户令牌
  • 检查令牌是否为admin(不是)。
  • OpenProcess -登录用户的explorer.exe的进程句柄
  • OpenProcessToken -获取访问令牌的句柄
  • LookupPrivilegeValue -SE_DEBUG,以确认我们可以调整令牌权利
  • DuplicateTokenEx -用户令牌
  • SetTokenInformation
  • AdjustTokenPrivileges
  • CreateEnvironmentBlock -在中运行新流程
  • 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)

c# session winapi

5
推荐指数
1
解决办法
1608
查看次数

标签 统计

c# ×1

session ×1

winapi ×1

windows-services ×1