CreateProcessAsUser 不绘制 GUI

2024-02-13

我有一个在“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 http://support.microsoft.com/kb/165194,我尝试将 lpDesktop 设置为 null,或者根本不设置它,两者都给出相同的结果:进程以预期用户的名称启动,我可以看到窗口标题栏的一部分。 “不可见”窗口拦截鼠标单击事件,并按预期处理它们。它只是不画自己。

有谁熟悉这样的问题并且知道我做错了什么?


MSDN 有一个示例,说明如何作为另一个用户在窗口站和桌面对象上设置显式权限来创建进程:

CreateProcessAsUser() 窗口站和桌面 https://support.microsoft.com/en-us/kb/165194

您可以使用 P/Invoke 将代码移植到 C#,也可以使用 C++/CLI 程序集。

但是,请注意,您的方案不受 Vista(和 Windows 7)支持,并且可能会中断会话 0 隔离 http://www.microsoft.com/whdc/system/sysinternals/Session0Changes.mspx(下载右侧白皮书)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CreateProcessAsUser 不绘制 GUI 的相关文章

  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 如何在coldfusion中获取当前页面URL?我在获取当前页面 URL 时获取 home_page_URL/index.cfm

    我正在使用下面的代码来获取 Coldfusion 中的当前页面 URL host structKeyExists cgi http host cgi http host req url https host cgi script name
  • 量角器错误,意外标记)

    我正要开始学习量角器并遵循其中的简单教程http www protractortest org tutorial http www protractortest org tutorial 但不幸的是运行此命令后出现奇怪的错误protract
  • 在不影响布局的情况下增大内联链接的可点击区域

    我希望使链接的可点击区域比实际的可访问性更大 因为对于目标用户来说 点击它们可能很困难 大约 1 5 倍的尺寸可能比较合适 这些是普通文本中的链接 因此我实际上无法将它们放大 这会弄乱布局 我利用 HTML5 CSS3 JS 甚至 Mozi
  • asp.net mvc4 无法从 json 正确反序列化和绑定 Dictionary>

    JSON NET 反序列化它很好 但是无论 mvc 用于控制器参数绑定的是什么 都很难 我还可以做其他事情来完成这项工作吗 位 public partial class Question public Dictionary
  • enable_if 中的短路运算符

    我想编写一个模板化函数 它需要一个array
  • 使用 Tweepy 避免 Twitter API 限制

    我在 Stack Exchange 上的一些问题中看到 限制可能是每 15 分钟请求数量的函数 并且还取决于算法的复杂性 只不过这不是一个复杂的算法 所以我使用这段代码 import tweepy import sqlite3 import
  • 文档 [my_spreadsheet_id] 丢失(也许已被删除?)

    偶尔 实际上经常发生 我会收到 文档 tIbdnvK2ZBY 7SQ2skESDvg 丢失 也许它已被删除 错误 这显然不是真的 谁能解释一下这个问题吗 也许有一些好的解决方案 我有一些在计时器上运行的脚本 偶尔会出现此错误 当脚本尝试访问
  • 验证 Oracle 列名称

    在一种情况下 我们动态创建 sql 来create动态临时表 table name 没有问题 因为它是由我们决定的 但是列名是由不在我们控制范围内的源提供的 通常我们会使用以下查询检查列名称 select where NOT REGEXP
  • 在 Java 中解压包含多个文件和目录的 7zip 存档 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想用 Java 解压包含多个文件和目录的 7zip lzma 存档 我尝试使用官方的 7zip SDK 但失败了 因为
  • CSS 容器DIv 高度。浮动DIV问题

    你能强制一个容器 DIV 的高度来容纳两个浮动的 div 子元素吗 我可以用一个奇特的技巧来做到这一点吗 我正在尝试在父 div 内制作两个大小相等的 div 我希望它们并排出现 并且它们之间有一点空白 Child2 往往会弹出并低于 Ch
  • 需要在github actions中设置环境

    每次工作流程运行时 我都需要安装几个 cli 这会在安装 构建和发布包方面占用大量时间 有哪些好的替代方案可以摆脱每次安装 要扩展 joseph 的答案 请创建一个 Docker 映像 该映像使用您需要的 CLI 工具准备环境 然后将其发布
  • 为什么工厂女孩不排序独特的属性?

    我的控制器规范失败 因为 Factory Girl 似乎正在创建非唯一的用户 即使我对需要唯一的用户属性进行了排序 错误 1 TopicsController POST create when topic is invalid should
  • Google Play - 为现有用户更新未发布的应用程序,但不为新用户更新?

    我在 Google Play 上有一个未发布的应用程序 我想为现有用户更新该应用程序 但不允许新用户下载它 Google Play 文档似乎说这可以通过简单地上传更新的 apk 而不是重新发布应用程序 来完成 未发布的应用程序 即使您取消发
  • git 如何知道它在 git 存储库中

    我感兴趣的是如何git实际上知道它在 git 存储库中 我的第一个想法是它只是将文件夹结构爬到根目录 这可能涉及权限错误 它在任何地方都有记录吗 经验法则是 Git 只是查找文件路径来查找 git 目录 但事实并非如此 正如爱德华 汤姆森所
  • c#:如何将exe文件嵌入到资源中?

    我用 Costura Fody 有一个应用程序 Test exe 它以这种方式运行进程internalTest exe ProcessStartInfo prcInfo new ProcessStartInfo strpath Create
  • 与其他顶级类同名的 Java 内部类

    我有与 Java 内部类相关的问题 有没有办法从定义内部类 A 的顶级类 Main 访问顶级类 A 下面是演示该问题的示例代码 class A Outer Class A System out println A outer class B
  • 找到多个集合的交集的最佳方法?

    我有一个集合列表 setlist s1 s2 s3 我想要 s1 s2 s3 我可以编写一个函数来通过执行一系列成对的操作来完成此操作s1 intersection s2 etc 有推荐的 更好的或内置的方法吗 从 Python 2 6 版
  • Python 安装程序在初始化步骤被阻止

    我试图使用安装程序在我的计算机上安装Python3 6 但安装程序在初始化步骤被阻止 我想知道为什么会发生这种情况 我也尝试了Python2 7 但它也在同一个地方被阻止 它在这里被阻止 取消选中为所有用户安装的选项 这为我排序了
  • 在 Swift 中以编程方式返回到之前的 ViewController

    我通过单击按钮将用户发送到页面 该页面是一个UITableViewController 现在 如果用户点击某个单元格 我想将他推回到上一页 我想到了类似的事情self performSegue back 但这似乎是一个坏主意 正确的做法是什
  • CreateProcessAsUser 不绘制 GUI

    我有一个在 SYSTEM 帐户下运行的 Windows 服务 用于检查每个登录用户是否正在运行特定的应用程序 如果应用程序未运行 服务将启动它 在相应的用户名下 我正在尝试使用 CreateProcessAsUser 来实现我的目标 该服务