java - CreateProcessAsUser win api 不适用于非 win7 平台

标签 java windows winapi

我正在使用 win-api 函数: 登录用户 加载配置文件 创建进程作为用户

使用java和jniwrapper。

我将我的应用程序作为服务进程(本地系统帐户)运行。

如果我使用 CreateProcessWithLogon - 它仅在我不从服务运行时才有效(只是常规的独立应用程序)。

该进程在 windows 7 上创建成功,但在 win xp 和 win 2003 服务器上创建失败。

你有什么线索吗? 如何在win平台上管理进程/用户权限?

谢谢......

最佳答案

Windows 处理服务的方式以及它们交互的方式在 NT 6.0(Vista、Server 2003 R2)周围发生了变化。它通常是一个复杂的主题,因为它涉及流程的创建,尤其是从应该是非交互式的东西创建 UI。 要理解它,通常需要充分了解 Windows 上的 session 、Winsta 和桌面。

更改(名为“ session 0 隔离”)记录在此处: http://msdn.microsoft.com/en-us/windows/hardware/gg463353 。 它指出从服务显示 UI 的正确方法是使用 CreateProcessAsUser 生成一个新进程,但您已经知道这一点,因为您的 Windows 7 计算机正在运行。

如果我没记错的话,CreateProcessAsUser 的行为也发生了变化:在以前的版本中,它不会自动将用户添加到 winsta 和桌面(它们是安全对象,即具有 ACL 的对象,如文件):

“如果应用程序在lpDesktop成员中指定了一个桌面,那么它就是 应用程序有责任添加权限 指定的用户帐户到指定的窗口站和桌面。”

这句话摘自这里: http://support.microsoft.com/kb/165194 非常有用的文章!包括有关如何执行所有 ACL 的代码示例 东西(不幸的是,非托管代码......)

此外,您还可以在这里找到其他相同的信息: http://msdn.microsoft.com/en-us/library/aa379608%28v=vs.85%29.aspx

关于java - CreateProcessAsUser win api 不适用于非 win7 平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898361/

相关文章:

java - java中如何让一个方法转到main方法?

java - 构建 jar 并包含库 jar

c - GetMessage() 挂断

winapi - Windows NotificationIcons 使用的正确处理 GUID 的方法

java - 在java中使用for循环无效使用int

r - 在 Windows 上安装包错误 : compilation failed for package 'cldr'

c - Windows C 运行时库没有像我预期的那样链接?

c++ - 找不到标识符 FindFirstFile

c++ - 对话框的单独任务栏按钮

java - 数组项目似乎只打印出null