使用Windows服务中的凭据启动进程

使用Windows服务中的凭据启动进程,第1张

使用Windows服务中的凭据启动进程

使用ProcessStartInfo启动新进程时,该进程在与启动进程相同的窗口站和桌面中启动。如果您使用不同的凭据,则用户通常将没有足够的权限在该桌面上运行。初始化错误失败是由于user32.dll尝试在新进程中进行初始化而无法进行的。

要解决此问题,您必须首先检索与Window Station和桌面相关联的安全描述符,并为用户添加适当的权限到DACL,然后在新的凭据下启动进程。

编辑:关于如何执行此 *** 作和示例代码的详细说明在这里有点长了,所以我整理了一篇代码文章。

        //The following security adjustments are necessary to give the new         //process sufficient permission to run in the service's window station        //and desktop. This uses classes from the AsproLock library also from         //Asprosys.        IntPtr hWinSta = GetProcessWindowStation();        WindowStationSecurity ws = new WindowStationSecurity(hWinSta,          System.Security.AccessControl.AccessControlSections.Access);        ws.AddAccessRule(new WindowStationAccessRule("LaunchProcessUser", WindowStationRights.AllAccess, System.Security.AccessControl.AccessControlType.Allow));        ws.AcceptChanges();        IntPtr hDesk = GetThreadDesktop(GetCurrentThreadId());        DesktopSecurity ds = new DesktopSecurity(hDesk, System.Security.AccessControl.AccessControlSections.Access);        ds.AddAccessRule(new DesktopAccessRule("LaunchProcessUser", DesktopRights.AllAccess, System.Security.AccessControl.AccessControlType.Allow));        ds.AcceptChanges();        EventLog.WriteEntry("Launching application.", EventLogEntryType.Information);        using (Process process = Process.Start(psi))        {        }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5499045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存