我正在使用 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/