CreateProcessAsUser win api无法在非win7平台上运行

时间:2011-08-01 12:24:04

标签: java windows winapi

我正在使用win-api函数: LOGONUSER loadProfile CreateProcessAsUser

使用java和jniwrapper。

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

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

该过程在Windows 7上成功创建,而不是在win xp和win 2003服务器上创建。

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

感谢....

1 个答案:

答案 0 :(得分:0)

他们的方式是Windows处理服务以及他们如何在NT 6.0(Vista,Server 2003 R2)周围进行交互。它通常是一个复杂的主题,因为它涉及从一个应该是非交互式的东西创建进程,尤其是UI。 理解它通常需要很好地了解Windows上的Session,Winsta和桌面。

此处记录了更改(名为“Session 0 isolation”): 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