我尝试创建一个能够打开应用程序的服务,但是一直没有成功。于是,我下载了下面这段示例代码,并试图基于它创建一个服务。但是,它也不起作用。代码会被执行,但可执行文件却从未被调用(在下面的案例中,计算器没有被打开)。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
namespace Open_Calculator
{
public partial class Service1 : ServiceBase
{
public static Process process;
public Service1()
{
//InitializeComponent();
string[] args = { "1", "2" };
OnStart(args);
}
protected override void OnStart(string[] args)
{
start_calc();
}
protected override void OnStop()
{
}
static protected void start_calc()
{
process = new Process();
process.StartInfo.FileName = @"C:\Windows\system32\calc.exe";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.ErrorDialog = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.Start();
}
}
}
同样的代码在控制台应用程序中复制粘贴后可以工作。
该服务被设置为与桌面交互,并且它被设置为以“LocalSystem”运行。
运行服务的帐户确实具有对C:\Windows\System32
的访问权限,我已经测试过了。Process.Start()没有返回任何错误,并且通过任务管理器检查,计算器没有在后台运行。
C:\Windows\System32
的权限?process.Start()
是否会产生错误?您是否已经通过任务管理器并检查“显示所有用户的进程”来验证计算器没有在后台运行? - PeteC:\Windows\System32
,我已经测试过了。Process.Start() 没有返回任何错误,并且通过任务管理器检查,calc 也没有在后台运行。 - Dot NET