我正在尝试在我创建的C#服务中执行一个shell命令。然而,这个命令似乎不能被执行。作为一个标准的控制台应用程序,它却能够完美地工作,因此我知道命令本身或从代码中执行的方式都没有问题。有谁能告诉我这为什么不起作用吗?请记住我对C#还很新,所以这可能只是我的经验问题。以下是来自服务本身的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading;
namespace AdapterDisableTest
{
class Program : ServiceBase
{
//private static Timer workTimer;
static void Main(string[] args)
{
ServiceBase.Run(new Program());
}
public Program()
{
this.ServiceName = "AdapterDisableTest";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
Process myProcess = new Process();
myProcess.StartInfo.FileName = @"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe";
myProcess.StartInfo.Arguments = "controlvm test setlinkstate1 off";
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
}
protected override void OnStop()
{
base.OnStop();
//TODO: clean up any variables and stop any threads
}
}
}
Process
功能。 - MartinStartInfo
中添加一个工作目录可能是值得的,因为从服务启动进程时,起始文件夹的行为是不同的 - 尝试设置StartInfo.WorkingDirectory = @"C:\Program Files\Oracle\VirtualBox"
并查看发生了什么。 - Martin