在调用
时,我正在C#3.0中编写Windows服务 p = new System.Diagnostics.Process();
p.StartInfo.FileName = aFileName;
p.StartInfo.Verb = "Print";
p.StartInfo.CreateNoWindow = true;
p.Start();
Start()不会启动进程,也不会打印aFileName参数中传递的指示文档。
如何从Windows服务启动进程? 我正在运行Windows Vista操作系统。
答案 0 :(得分:1)
我认为这是因为启动流程需要服务与桌面交互,默认情况下,不允许在服务中使用
答案 1 :(得分:0)
我曾经使用网页将上传的文件发送到打印机,将其转换为pdf。这就是我过去运行的过程。
try
{
processInfo = new System.Diagnostics.ProcessStartInfo();
processInfo.CreateNoWindow = true;
processInfo.FileName = aFileName;
processInfo.Arguments = "";
processInfo.UseShellExecute = true;
processInfo.Verb = "Print";
processInfo.WorkingDirectory = "c:\\temp";
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = processInfo;
process.Start();
while (process.HasExited == false)
{
}
}
catch (Exception ex)
{
throw new Exception("Died in launch process:" + ex.Message, ex.InnerException);
}
关于while语句的说明。在我看来,这个过程会在我的函数结束时死掉,所以我用while来保持它活着直到它完成。
答案 2 :(得分:0)
简而言之,您必须利用Windows API来查询用户的令牌,然后在用户空间中启动该过程。我没有时间处理或查找示例代码,但基本上您需要使用以下API调用:
GetActiveConsoleSessionId获取活动的Windows控制台会话, WTSQueryUserToken用于查询用户的令牌, CreateEnvironmentBlock为该用户创建EnvironmentBlock然后使用 CreateProcessAsUser将进程启动到用户的空间。
可能有一个例子(可能在MSDN上),但这应该为您提供您需要的首发电话。