问题标签 [createprocessasuser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2304 浏览

vb.net - CreateProcessAsUser 中的参数问题

我被分配构建一个 Windows 服务,该服务能够使用 VB.NET 2005 向当前交互式用户启动一个进程。

经过一番研究,我构建了以下代码:

但是我在调​​用 CreateProcessAsUser 时收到错误 87 (ERROR_INVALID_PARAMETER)。有人可以指出我做错了什么?

该代码被实现为在 LocalSystem 帐户下运行的 Windows 服务。

0 投票
1 回答
7921 浏览

winapi - 为什么 CreateProcessWithTokenW 因 ERROR_ACCESS_DENIED 而失败

我对 CreateProcessWithTokenW 的调用因访问被拒绝而失败。任何想法如何调试这个?

对 CreateProcessWithTokenW 的调用在这里:https ://github.com/fschwiet/PShochu/blob/master/PShochu/PInvoke/NetWrappers/ProcessUtil.cs

现在我正在为当前进程使用访问令牌,最终我将使用来自另一个用户的令牌。现在,我正在使用https://github.com/fschwiet/PShochu/blob/master/PShochu/PInvoke/NetWrappers/AccessToken.cs来获取访问令牌。

如果要调试,请下拉源代码并运行 build_and_test.ps1。错误堆栈是:

稍后更新:我在一些文档中看到需要额外的权限(http://msdn.microsoft.com/en-us/library/aa374905%28v=vs.85%29.aspx)。我无法进行测试以验证我是否拥有这些单独的证券(它们是在 secpol.msc 重启前设置的)

这些测试一直告诉我我没有在 UI 中设置的权限,https://github.com/fschwiet/PShochu/blob/master/PShochu.Tests/verify_privileges.cs

0 投票
2 回答
608 浏览

c++ - 使用 getenv 调用 CreateProcessAsUser 的 C++ LPTSTR 问题

我正在尝试调用函数 CreateProcessAsUser。传递常量字符串很好。尝试使用 char* getenv(const char name) 获取环境变量给我带来了问题。

如果我使用以下内容,notepad.exe 将运行。

但是,如果我使用以下内容,则不会运行。

我是否正确指定了 getenv 和 (LPTSTR)?

我尝试使用包含 c:\\windows\\notepad.exe 和 c:\windows\notepad.exe 的用户和系统环境变量。

谢谢!

0 投票
2 回答
8950 浏览

c# - 如何在系统 Windows 用户帐户下启动控制台应用程序?

我试过

但它产生

Win32Exception 未处理

登录失败:未知用户名或密码错误

我将不得不使用CreateProcessAsUser?如何获取适当的参数以传递给该方法?

0 投票
1 回答
101 浏览

c# - 对 Windows 服务的帮助不大

(需要 c#,.net 框架 2.0)

你好。

这是一个实用的技术问题……您已被警告过。:)

我有一个 Windows 服务,它要求每个用户提供一个在线服务的登录信息。假设我们有两个用户 a 和 b。

a 运行安装过程,最后要求提供在线服务的登录凭据。将其存储在本地并 ding,当服务启动时它知道用户。

b 出现,注销 a,自己登录。该服务注意到一个新用户,检查它是否有登录详细信息,发现没有。

我想我可以使用 Process.Start 来启动一个 Windows 应用程序。不。所以我用谷歌搜索,看起来如果我写一堆代码(这里显示为 CreateProcessAsUser )是可能的,但不建议这样做。

所以我该怎么做?对任何技术或实际解决方案感到高兴。

0 投票
2 回答
25143 浏览

windows - 示例代码:服务调用 CreateProcessAsUser() 我希望进程在用户会话中运行,而不是会话 0

我正在寻找示例代码:

对于服务调用 CreateProcessAsUser() 我希望进程在用户的会话中运行,而不是会话 0

到目前为止,创建的进程仅像会话 0 中的服务一样运行

0 投票
0 回答
1480 浏览

windows - CreateProcessAsUser 不是来自服务

我想在另一个用户帐户(非提升)凭据下运行应用程序,而该用户已经登录。具体来说,我希望我的应用程序的安装程序(在任何管理员帐户下运行)将进程生成到每个登录用户的桌面会话中。这些进程与服务通信并在桌面上显示窗口供用户交互。

通常,从运行 as 的服务LocalSystem,方法是WTSQueryUserToken-> CreateProcessAsUser。但是,WTSQueryUserToken不会在LocalSystem帐户之外运行(具有SE_TCB_NAME特权),这使得该方法在这里失败。

如果用户还没有登录,我可以只注册应用程序以在 下运行HKLM\...\Run,这样任何登录的用户在登录时都会得到应用程序的副本。但是如果用户已经登录,那不会' 也不起作用(至少,直到他们注销并重新登录)。

我可以看到两个可能的答案:

  1. 你不能这样做。对不起。

  2. 您可以从其他地方获取令牌(也许枚举 explorer.exe 进程并从每个进程中提取访问令牌?),调用DuplicateTokenEx,然后传递给CreateProcessAsUser. 我尝试了这种方法并在尝试OpenProcessToken在另一个用户会话下运行的进程时始终收到“拒绝访问”,即使启用了调试权限并且进程以PROCESS_ALL_ACCESS.

你怎么看?

如果答案是 #1(“你不能这样做”),那么生成非提升进程以在服务和用户之间进行调解的推荐最佳实践是什么?服务通过 CreateProcessAsUser 将这些进程生成到每个会话中是最佳实践吗?还是单独运行非提升进程的最佳实践(例如,通过HKLM\...\RunHKCU\...\Run)?

0 投票
0 回答
498 浏览

winapi - 7 次调用后,CreateProcessAsUser 在 Windows 7 中失败

我的服务使用 CreateProcessAsUser 为目标机器上的每个核心生成一个进程。该进程是一个 MFC 程序,它已被修改为使用命令行参数而不是 GUI 控件运行。自 XP 以来,它已在此方案中成功运行。我有两台运行 WIN7 x64 的新机器,一台有 8 个内核,一台有 12 个内核,但在两台机器上都创建了 7 个进程并成功执行,但第 8 个进程启动然后死亡。该进程在没有退出代码的 MFC LoadFrame 调用上终止。

我已经编写了我的服务,因此它可以从命令行运行,并且当我从命令行以我在 CreateProcessAsUser 中使用的同一用户执行它时,我可以成功地让第 8、9、10 等进程正常启动和执行。正如你可以想象的那样,让 7 开始让我觉得我“相当”正确地调用了 CreateProcessAsUser。LoadFrame 失败表明 Windows 站或桌面存在问题。有任何想法吗?

0 投票
1 回答
2300 浏览

windows - 在 Win7 登录屏幕上运行应用程序

我想通过服务在 Windows 7 的登录屏幕上运行应用程序。

我已经对此进行了长期研究并尝试了不同的方法,但不幸的是到目前为止还没有完全成功。我设法在当前登录用户的锁定屏幕上运行该应用程序 - 起初我认为这是我基本上试图实现的目标。但是,我随后意识到每个用户和一般用户(独立于用户)都有不同的登录屏幕。

我的猜测是,这个用户独立登录屏幕(当多个帐户可用或单击锁定屏幕上的“切换用户”时直接在启动后出现)在会话 0 中运行,而用户 1 在会话 1 中运行,用户 2 在会话中运行2 以此类推。问题是,如果我在会话 0 中运行应用程序(使用“winsta0\winlogon”),它是不可见的;在会话 1 中运行可以正常工作,但没有多大帮助,因为用户必须已经为此登录。

那么如何在独立于用户的登录/欢迎屏幕上运行应用程序呢?为此目的,正确的参数和功能是什么?有人有演示的工作示例吗?(Delphi 是首选,但实际上任何其他语言也可以!)

0 投票
0 回答
475 浏览

rest - 使用委托从 Web 服务通过 CreateProcessAsUser 创建的连续进程无法读取/写入网络共享

在尝试访问网络共享时,什么可能导致使用委托从 Web 服务通过 CreateProcessAsUser 创建的连续进程遇到 System.UnauthorizedAccessException 异常?

WCF Rest Web 服务使用带有重复用户令牌的 CreateProcessAsUser 启动一个新进程。该过程开始并报告它由具有共享访问权限的模拟用户所有。

在 Web 服务器干净启动时,该进程可以在网络共享目录 (\\nasshare\test) 上一遍又一遍地调用 System.IO.Directory.Exists 并获得正确的响应。但是,当进程结束并再次调用 Web 服务以再次启动进程时,它将报告该目录不再存在,然后我的程序代码尝试创建据称丢失的目录并失败并出现异常消息:System. UnauthorizedAccessException:对路径“\\nasshare\test”的访问被拒绝。

奇怪的是,如果我重新启动网络服务器,它将再次工作......直到进程结束。Web 服务创建的连续进程将失败。当我从 Web 服务器上的命令提示符运行该进程时,该进程可以看到该文件夹​​并对其进行写入。我可以以这种方式一遍又一遍地运行该过程,即使在使用 Web 服务器中的 CreateProcessAsUser 启动失败后它也会立即正常工作。

  • 网络服务器:Windows Server 2008 R2
  • 网络共享:Windows Storage Server 2003
  • 网络服务托管:IIS7
  • 网络服务客户端:IE、Chrome
  • 应用程序池标识:NetworkService
  • .Net 框架:v4.0

简化的 Rest Web 服务

test.exe 程序代码的简化示例