【发布时间】:2015-12-04 09:40:06
【问题描述】:
我有一个 Windows 服务,我希望它能够自动更新。 因此,当我的服务了解到有更新时,它会创建一个 .bat 文件:
File.WriteAllLines(updateFileName, new string[] {"sc stop "+ServiceName,
"ping 10.10.10.10 -n 8", "DEL "+ServicePath,
"RENAME "+NewServicePath+" "+ServicePath, "sc start "+ServiceName})
然后我创建一个进程并启动它,这两个我都试过了
Process updateProcess = new Process();
updateProcess.StartInfo.FileName = updateFileName;
updateProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
updateProcess.StartInfo.CreateNoWindow = true;
updateProcess.StartInfo.Verb = "runas";
updateProcess.Start();
还有这个
var psi = new ProcessStartInfo
{
CreateNoWindow = true,
UseShellExecute = false,
FileName = "cmd.exe",
Arguments = "/C " + updateFileName,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true,
RedirectStandardError = true,
Verb = "runas",
ErrorDialog = false
};
updateProcess.StartInfo = psi;
updateProcess.Start();
我还尝试编写一个控制台应用程序 updateService.exe 来停止、更新和启动服务。在这种情况下,我使用ServiceDirectory\updateService.exe 创建了一个 .bat 文件并尝试运行它。
我的服务使用LocalSystem 帐户。
以上所有这些都可以在 Windows 7 上完美运行。
但在 Windows XP 上它不起作用:
- 服务停止,ping 正常,删除和重命名命令不起作用, 服务不再启动。
- 服务使用updateService.exe 启动.bat 文件,服务停止并再次启动,但服务.exe 文件没有更新。
所以,我想知道如何强制我的服务在 Windows XP 上自我更新,我认为特权存在一些问题,但我不知道如何处理它们。
【问题讨论】:
-
显而易见的调试技术是将这些命令的输出重定向到文件,这样您就可以找出它们失败的原因。您可能需要` 2>` 来捕获错误消息。也就是说,XP 不再受支持。
-
@MSalters 我使用输出文件,但那里什么也没有,文件保持空白。我知道 XP 不支持了,但我们公司仍在使用近百台装有 Windows XP 的计算机,我需要这项服务才能在它们上工作
标签: c# batch-file service windows-xp