问题标签 [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.
c# - 将由 ShellExec/Process.Start 启动的浏览器置于最前面
下面的复杂解决方案需要将浏览器窗口置于前面。它的工作时间约为 90%。问题是那 10%,其实不然。
我有一个应用程序在与用户的活动桌面不同的桌面上运行(它是一个屏幕保护程序)。我还有一个从屏幕保护程序接收事件的 Windows 服务。该服务然后执行以下操作:
- 模拟当前登录的用户并使用命令行参数中的 URL 启动帮助应用程序。
- 助手应用程序由 CreateProcessAsUser 启动 - 这也是助手的理由,我需要使用 ShellExec,因此必须使用单独的进程。
此帮助应用程序执行以下操作:
- 等到用户的当前桌面变为活动状态。在此之前,它会进行一段时间的循环并进行一些睡眠。
- 然后它找出用户的默认浏览器
- 使用 ShellExec(C# 中的 Process.Start)启动默认浏览器,并向浏览器传递一些命令行参数和 URL。
助手应用程序调用的实际命令行是这样的:
cmd /C start "" C:\PathToBrowser\Browser.exe URL -someargument
到目前为止,除了一件重要的事情之外,一切都在工作:浏览器并不是在所有可能的情况下都被放在前面。
还有什么比这更进一步的,我可以用这些浏览器来强迫它们出现在前面吗?我的问题是这样的:
假设我从命令行启动 Chrome。Chrome 只会向已经运行的实例发送一条消息,然后退出。所以我不能依赖我启动的进程的 PID 和 hWnd,它与实际显示网页的进程不同。
任何帮助将非常感激。
c# - C# .NET Framework API(非 Win32 API)中的 CreateProcessAsUser()
当我使用 Win32 API CreateProcessAsUser() 在我的 C# .NET 项目中使用模拟用户执行程序时,它是成功的。
但我想使用 .NET Framework API 来实现它。
有类似 System.Diagnostics.Process.Start() 的方法,但它与 CreateProcessAsUser() 不完全相同。
函数 CreateProcessAsUser() 在第一个参数处接收“hToken”。因此,当我复制一个令牌并将其用于该功能时,我可以模拟一个用户并与该用户一起执行一个程序。
但是 System.Diagnostics.Process.Start() 方法没有提供这样的参数。
如果有人知道这个,请告诉我好吗?谢谢
c# - .NET 应用程序在 createprocessasuser 后崩溃
我有一个在系统帐户中运行的服务,它应该以用户模式启动应用程序。在 c++ 中没有问题,但在 .NET 中我有很多。
最后我复制了当前用户会话的用户令牌(explorer.exe)
该应用程序似乎以用户模式启动,但在到达我的代码的第一行之前直接崩溃;)
当我直接或通过我的服务调用流程时,我使用流程资源管理器检查了差异。
似乎.Net程序集的加载不起作用,但我不知道为什么(或者唯一的原因是因为我复制了一个非.NET令牌,但读取所有应用程序启动为非.NET版本并且Windows正在检测它在 lload 期间必须加载程序集)
我的代码:
c++ - 管理员进程如何在登录用户中打开应用程序?
概述
The Process
用 C++ 编译并运行的 exe/dll
设想
- 登录(win 7)到标准用户帐户(无管理员)
- 以管理员身份运行
The Process
The Process
使用ShellExecute打开一些应用程序(exe)
问题
应用在admin 用户范围内打开
期待
应用在标准用户范围内打开
解决方案
1. CreateProcessAsUser
使用CreateProcessAsUser(假设我设法hToken
正确解决了问题)。
但是,我的呼叫失败,错误代码为1314 - ERROR_PRIVILEGE_NOT_HELD。回到文档告诉我:
如果此函数因 ERROR_PRIVILEGE_NOT_HELD (1314) 而失败,请改用 CreateProcessWithLogonW 函数
所以我深入研究并发现这个CreateProcessAsUser Error 1314不是很有帮助。
2. 模拟LoggedOnUser
使用ImpersonateLoggedOnUser生成相同的错误代码:1314 - ERROR_PRIVILEGE_NOT_HELD。
3. CreateProcessWithLogonW
CreateProcessWithLogonW需要lpPassword
我自然没有
问题
管理员进程如何在登录用户中打开应用程序?
python - 为什么 CreateProcessAsUser 在我的代码中有错误 1314?
我需要以用户身份创建进程。但是在创建过程中会出现一些错误。错误是:1314 CreateProcessAsUser A required privilege is not held by the client.
run_as_user
当我尝试创建进程时,错误出现在函数中。我能够阅读,我必须设置SE_TCB_NAME
,SE_ASSIGNPRIMARYTOKEN_NAME
以及E_INCREASE_QUOTA_NAME
使用 CreateProcessAsUser。所以我不知道问题出在哪里。
windows - OpenMutex 在使用 CreateProcessAsUser 打开的进程中失败
几天来我一直在努力解决这个问题,我一定已经阅读了互联网上的每一页,即使是远程相关的,但我仍然找不到答案。帮助!
这是场景:在 Windows 7 中,我有一个在管理员用户帐户(不是服务)下运行的进程。它创建了一个名为 mutex 的全局名称,稍后将用于在常规用户帐户下运行的子进程中。无论我做什么,或者我在互斥体上放置什么 ACL,子进程在尝试获取句柄时都会不断返回 Access Denied。
我已经将我的代码提取到一个测试应用程序中,只是为了试验进程和互斥体部分,我发现了一些令人惊讶的事情:如果我在没有首先创建互斥体的情况下从用户应用程序调用 OpenMutex,我预计会出现 Not Found 错误,但我仍然获得拒绝访问。但是,如果我从资源管理器启动用户应用程序(shift-right-click,Run as different user...),我会得到预期的行为。我还注意到,当从管理应用程序启动时,用户应用程序有一个普通的块状窗口边框,而不是正常的 Windows 主题。
所以我的猜测是我启动用户应用程序的方式有问题,但我看不出我错过了什么。
以下是相关部分:
createprocessasuser - 在 CreateProcessAsUser 中使用 lpEnvironment
我需要了解 CreateProcessAsUser 中 lpEnvironment 的使用。
我的解决方案中有这两行代码,它们由作为本地系统运行的 Windows 服务调用。
CreateProcessAsUser(hTokenCpy, null, applicationName, ref saProcess, ref saThread, false, CREATE_UNICODE_ENVIRONMENT, hEnv, null, ref si, out procInfo)
在调用这个之后调用
CreateEnvironmentBlock(out hEnv, hTokenCpy, false) || hEnv == IntPtr.Zero)
但是,如果对 CreateProcessAsUser 的调用失败。
通过传递 hEnv/IpEnvironment = 0 进行另一次尝试
CreateProcessAsUser(hTokenCpy, null, applicationName, ref saProcess, ref saThread, false, 0, IntPtr.Zero, null, ref si, out procInfo
但是,当以特定用户名创建进程时,创建的进程无法与桌面交互。即使登录用户和运行进程的用户相同。
这是因为进程是在 Windows 服务的内存块而不是登录的用户下创建的吗?
c# - 以 CreateProcessAsUser 开头的 exe 在启动时随机崩溃
情况如下:我有一个 C# .NET Windows 服务(作为本地系统运行),它使用CreateProcessAsUser在当前登录的用户帐户下启动一个卫星 C# .NET 可执行文件(无窗口 WinForms)。
有时它有效,有时……它没有。我可以看到 exe 在任务管理器中显示一秒钟,然后消失。exe的主要方法没有命中,所以我认为问题来自CreateProcessAsUser。
事件查看器显示代码为 0xc06d007e 的应用程序错误,这无济于事。还有一个 Windows 错误报告说要查看转储文件,但是这些文件在给出的路径中丢失了。
我不知道如何调试它。如果至少我能看到一个真正的错误。
这是完全随机的。
编辑:
这是一些要求的代码。
winapi - CreateProcessAsUser 有效, CreateProcessWithTokenW 无效
我们有一个作为 LocalSystem 运行的服务。我们使用 CreateProcessAsUser 和 LoadUserProfile 作为特定用户启动工作应用程序。效果很好。但是如果我们尝试使用 CreateProcessWithTokenW 来避免显式加载和管理用户配置文件,它会失败,并且在事件日志中记录以下内容:
有什么技巧可以让 CreateProcessWithTokenW 工作吗?
c++ - 如何在本地服务的登录用户会话中启动提升的进程?
我需要在本地服务的交互式登录用户会话中启动提升的进程。为此,我使用与此非常相似的代码。
但我不确定如何在WTSQueryUserToken API 返回的用户令牌中指定提升,并使其在 Windows XP 及更高版本上工作?