如何从Windows服务中打开命令提示符(cmd)?

6

我正在创建一个使用C#的Windows服务。我想从服务中打开cmd.exe。我的操作系统是Windows 8。这是否可能在Windows服务中实现,或者有其他替代方法。

(我想在一段时间后打开cmd.exe - 这就是为什么我选择了Windows服务的原因)


1
在什么时间间隔后?在登录Windows之后?您可以使用计划程序代替。 - Raptor
我已经尝试过使用计划程序而不是Windows服务,但没有成功。该应用程序是用VB构建的,当我运行它时会打开cmd,但从计划程序无法打开。 - Jui Test
你能展示一些代码吗?你正在使用 System.Diagnostics.Process.Start 吗? - David Gardiner
1个回答

4
这个方法行不通。问题在于你正在尝试从Windows服务中显示UI(Console),而Windows服务并没有在任何特定用户的上下文中运行。从Vista和更高版本的操作系统开始,Windows服务运行在一个隔离会话中,并被禁止与用户或桌面交互,这使得运行变得不可能。
根据您的需求,有两种解决方案:
1. 如果您想要打开 cmd 窗口,您可以考虑使用 Windows任务计划程序中的任务计划操作,然后执行您的操作。
2. 如果您只需要执行一些不需要显示UI(例如复制文件)的cmd.exe 操作,则可以使用以下方式实现:
以不创建窗口的方式启动cmd
ProcessStartInfo processInfo = new ProcessStartInfo
            {
                WindowStyle = ProcessWindowStyle.Normal,
                CreateNoWindow = true,
                UseShellExecute = false,
                FileName = "cmd.exe",
                Arguments = @"/C copy /b Image1.jpg + Archive.rar Image2.jpg"
            };

请查看以下链接以获取更多详细信息:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接