我有一个每 10 分钟运行一次的 Windows 服务,它会检查以确保我们软件的所有正确部分都已安装并且是最新的。每次执行该服务时,它都会使用以下函数来安装可执行文件:
public static bool InstallControlPanel()
{
try
{
//this will change
string sSetupFile = @"C:\Projects\SyncAgentV2\SyncAgentV2.ControlPanel.Installer\SyncAgentV2.ControlPanel.Installer\Express\SingleImage\DiskImages\DISK1\setup.exe";
if (!System.IO.File.Exists(sSetupFile))
{
Debug.WriteLine("Service Installer doesn't exist.");
return false;
}
Process oProcess = new Process();
oProcess.StartInfo.ErrorDialog = true;
oProcess.StartInfo.UseShellExecute = true;
oProcess.StartInfo.Arguments = "/s /v/qn";
oProcess.StartInfo.FileName = sSetupFile;
oProcess.Start();
oProcess.WaitForExit();
return true;
}
catch (Exception oEx)
{
Debug.WriteLine(oEx);
return false;
}
}
当我从服务调用此方法时对其进行调试时,它会运行并执行所有步骤,返回 true,但不会安装可执行文件。我可以从 WPF 调用这个方法并且它可以工作,所以问题一定是服务调用它的方式。
现在,该服务设置为作为本地系统登录。我怀疑某项服务无法按照我想要的方式运行,或者我需要它以其他用户身份登录。有人可以验证这一点或将我指向不同的方向吗?
编辑:此方法有效,但当我从服务调用它时无效。