我需要从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#编写的Windows服务,我需要从中运行一个控制台应用程序.控制台应用程序也用c#编写.
控制台应用程序运行时不是从Windows服务运行.当它从ws运行它没有做它应该做的任何事情,因为它应该工作10-20秒我在调试代码中看到立即执行.
我用以下代码启动我的控制台应用程序:
proc.Start(fullPathToConsole, args);
proc.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
控制台的路径是正确的,当我试图从cmd或只是在资源管理器(没有args)运行它时,它工作正常.但在运行该服务后,我认为没有效果.
我已经尝试转到服务属性并授予它访问桌面的权限,并在系统和我的用户下运行(也在服务属性中指定).一切都保持不变.
附加:我知道服务没有ui,我不想要.我希望服务运行控制台应用程序.无需从中获取任何数据或像ui一样使用此控制台,只需运行它就可以完成它的工作.
更新我发现,运行计算或任何其他Windows应用程序很容易.但仍然无法运行cmd或任何控制台应用程序.实际上我需要在XP SP2和Windows 2003 Server上运行它.所以无论如何都不需要与Vista交互.
任何评论都会很高兴!
我试图使用下面的代码从Windows服务启动Windows应用程序
Process.Start(@"filename.exe");
Run Code Online (Sandbox Code Playgroud)
在Windows 7中,我收到一个弹出窗口,上面写着"在此计算机上运行的程序正在尝试显示消息"
我一直在研究phantomJS,看起来它可能是一个使用生成PDF的好工具.我想知道是否有人成功地将它用于他们的.NET应用程序.
我的具体问题是:如何在服务器上使用rasterize.js等模块,接收请求并将生成的pdf作为响应发回.
我的一般问题是:在.NET应用程序中使用phantomJS是否有任何最佳实践.实现它的最佳方法是什么?
我在.NET World中相当新,我希望得到更详细的答案.感谢大家.:)
我创建了一个带有Timer的Windows服务,并且在触发事件中timer.Elapsed我正System.Diagnostics.Process.Start(exe path)以5秒的间隔创建一个process().但是这个过程不会在事件发生时创建.
有没有其他方法这样做?
提前致谢.
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Process pr = new Process();
pr.StartInfo.FileName = @"C:\Program Files\Messenger\msmsgs.exe";
pr.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
pr.StartInfo.CreateNoWindow = false;
pr.Start();
}
Run Code Online (Sandbox Code Playgroud) 我正在创建Windows服务并使用C#。我想从服务中打开cmd.exe。我的操作系统是Windows8。是否可以从Windows服务中获取,或者是否还有其他选择。
(我想在一定间隔后打开cmd.exe-这就是为什么我选择Windows服务的原因)
我用C#编写了一个Windows服务.我的服务是打开一个启用Excel宏的工作簿(这是在Excel 2010中).我已经在运行Windows Server 2008 64位的服务器上安装了此服务.当没有人在服务器上登录时,我的服务似乎在启动Excel时出现问题,是否有人有解决方案?
我收到以下错误:
System.Runtime.InteropServices.COMException(0x8000401A):由于以下错误,检索CLSID为{00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败:8000401a.
Excel已安装在服务器上,当我登录服务器时服务正常,但是一旦所有用户都注销,我就会收到上述错误.无论服务器上是否有打开的会话,我都希望该服务能够启动我的Excel工作簿.