我安装了一个PostScript打印机驱动程序,并安装了REDMON (redmonnt.dll),用于将postscript输出重定向到我的程序。在我非常简单的c程序中,我从STDIN捕获数据,并且能够成功地将其保存到.ps文件中。文件看上去没问题。
但是,我想启动gsview.exe来查看文件。如果我调用ShellExecute,它会因为权限问题而在Windows 7中失败。我的程序似乎是在另一个用户帐户(本地服务)下调用的。因此,我正在寻找一种在特定用户名(发起打印作业的用户)下运行gsview.exe的方法,这个用户名在名为REDMON_USER的变量中以及SESSIONID中都是可用的。
Q:,在给定用户名和会话and的情况下,启动程序所需的最低WinAPI调用是多少?
C/C++、.NET中的任何代码示例都将非常有用。
编辑:我正在尝试完成的是非常类似于醉酒者(来自红方)的东西。我不想使用“再醉”,因为它会在控制台窗口附近打开片刻。
注: 1)程序由打印机服务作为本地服务帐户调用。2)第一个参数用户名(REDMON_USER)实际上指向当前正在查看屏幕的用户。
发布于 2010-05-25 19:04:54
看看CreateProcessAsUser。
还可以看看CreateProcessWithLogonW和CreateProcess。
它们是从CreateProcessAsUser链接的。
编辑以回应OP的评论。
遵循这个线程的建议。
我在这里逐字复制此链接,以防原始链接停止工作:
同样的代码在Vista上和XP上一样有效。该服务以本地系统的形式运行。
谢谢你埃夫拉。
PS。哦,joy的Windows编程,有很长一段时间没有做了。现在我想起来了为什么。唯一接近甚至更糟的是OpenSSH编程。
发布于 2010-05-26 13:56:46
文档描述了“以用户身份运行”功能,这似乎正是您想要的:
以用户身份运行是为了通过GSview在本地通过RedRun启动GUI程序。
https://stackoverflow.com/questions/2907512
复制相似问题