我需要从Windows服务启动一个程序.该程序是用户UI应用程序.此外,该应用程序应在特定用户帐户下启动.
问题是Window Services在会话#0中运行,但登录的用户会话是1,2等.
所以问题是:如何从窗口服务启动一个进程,使其在当前登录的用户会话中运行?
我强调的问题不在于如何在特定帐户下启动流程(很明显 - Process.Start(new ProcessStartInfo(".."){UserName = ..,Password = ..})).即使我安装我的Windows以在当前用户帐户下运行,该服务仍将在会话#0中运行.设置"允许服务与桌面交互"没有帮助.
我的Windows服务是基于.net的.
更新:首先,.NET在这里无关,它实际上是纯Win32的东西.这就是我正在做的事情.以下代码在我的Windows服务中(C#使用win32函数通过P/Inkove,我跳过导入签名,它们都在这里 - http://www.pinvoke.net/default.aspx/advapi32/CreateProcessWithLogonW.html):
var startupInfo = new StartupInfo()
{
lpDesktop = "WinSta0\\Default",
cb = Marshal.SizeOf(typeof(StartupInfo)),
};
var processInfo = new ProcessInformation();
string command = @"c:\windows\Notepad.exe";
string user = "Administrator";
string password = "password";
string currentDirectory = System.IO.Directory.GetCurrentDirectory();
try
{
bool bRes = CreateProcessWithLogonW(user, null, password, 0,
command, command, 0,
Convert.ToUInt32(0),
currentDirectory, ref startupInfo, out processInfo);
if (!bRes)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
}
catch (Exception …Run Code Online (Sandbox Code Playgroud) 我能够在我的C#/ WPF应用程序中创建PDF并使用以下命令运行它们:
Process.Start(_pathToPDFFile);
Run Code Online (Sandbox Code Playgroud)
这适用于Adobe Acrobat,但不适用于Adobe Reader.安装Adobe Reader时,Process.Start()除非Reader进程已在任务管理器中运行,否则不执行任何操作.
当我尝试启动PDF时,如何让Adobe Reader显示PDF?