Tag: createprocessasuser

CreateProcessAsUser不绘制GUI

我有一个在“SYSTEM”帐户下运行的Windows服务,它检查每个登录用户是否正在运行特定的应用程序。 如果应用程序未运行,则服务启动它(在相应的用户名下)。 我正在尝试使用CreateProcessAsUser()来实现我的目标。 该服务确实以相应的用户名启动应用程序,但未绘制GUI。 (是的,我确保启用“允许服务与桌面交互”复选框)。 系统:XP SP3,语言:C# 以下是一些可能感兴趣的代码: PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION(); startInfo.cb = Marshal.SizeOf(startInfo); startInfo.lpDesktop = “winsta0\\default”; bResult = Win32.CreateProcessAsUser(hToken, null, strCommand, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out processInfo); 据我了解,设置startInfo.lpDesktop =“winsta0 \ default”; 应该使用相应用户的桌面。 甚至与此处所述相反: http : //support.microsoft.com/kb/165194 ,我尝试将lpDesktop设置为null,或者根本不设置它,两者都给出相同的结果:进程以预期的名称启动用户和我可以看到窗口标题栏的一部分。 “不可见”窗口拦截鼠标单击事件,按预期处理它们。 它只是没有吸引自己。 有人熟悉这样的问题,知道我做错了什么吗?

从C#中的CreateProcessAsUser捕获标准输出

我目前正在使用pinvoke CreateProcessAsUser api在asp.net网站内启动进程。 这非常适合模拟已登录的AD用户。 然而,不知何故,控制台输出的结果字符串始终为空。 我找不到出了什么问题。 没有崩溃或任何东西只是没有输出。 public static class Process { static readonly IntPtr INVALID_HANDLE_VALUE = (IntPtr)(-1); static readonly HandleRef NullHandleRef = new HandleRef(null, IntPtr.Zero); const int STD_INPUT_HANDLE = -10; public const UInt32 Infinite = 0xffffffff; const int STARTF_USESTDHANDLES = 0x100; [DllImport(“kernel32.dll”, SetLastError = true)] static extern bool SetHandleInformation(IntPtr hObject, HANDLE_FLAGS dwMask, HANDLE_FLAGS dwFlags); […]

从C#调用CreateProcessAsUser

我一直在尝试使用Windows API的CreateProcessAsUser函数在特定用户的上下文中创建一个新进程,但似乎遇到了一个相当讨厌的安全问题…… 在我进一步解释之前,这里是我正在使用的代码来启动新进程(一个控制台进程 – PowerShell具体,但它应该无关紧要)。 private void StartProcess() { bool retValue; // Create startup info for new console process. var startupInfo = new STARTUPINFO(); startupInfo.cb = Marshal.SizeOf(startupInfo); startupInfo.dwFlags = StartFlags.STARTF_USESHOWWINDOW; startupInfo.wShowWindow = _consoleVisible ? WindowShowStyle.Show : WindowShowStyle.Hide; startupInfo.lpTitle = this.ConsoleTitle ?? “Console”; var procAttrs = new SECURITY_ATTRIBUTES(); var threadAttrs = new SECURITY_ATTRIBUTES(); procAttrs.nLength = Marshal.SizeOf(procAttrs); […]