wbadmin 命令无法从 windows 服务 运行
wbadmin command can't run from windows service
string path = "D:";
string wbadminPath = Environment.SystemDirectory + @"\wbadmin";
string wbadminEvent = "start systemstatebackup -backupTarget:" + path + " -quiet";
try
{
int exitCode = 0;
ProcessStartInfo start = new ProcessStartInfo(wbadminPath, wbadminEvent);
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
exitCode = proc.ExitCode;
}
}
如果我在控制台应用程序中执行此代码,- 它有效。
如果我在 Windows 服务中执行此代码,我会遇到此错误:
Microsoft BLB 备份的命令行界面已停止工作
问题签名:
问题事件名称:APPCRASH
应用名称:wbadmin.exe
应用版本:6.0.6001.18000
申请时间戳:47918aed
故障模块名称:kernel32.dll
故障模块版本:6.0.6002.18327
故障模块时间戳:4cb73436
异常代码:c0000142
异常偏移:00009f7d
OS版本:6.0.6002.2.2.0.274.10
区域设置 ID:1033
附加信息 1:9d13
附加信息 2:1abee00edb3fc1158f9ad6f44f0f6be8
附加信息 3:9d13
附加信息 4:1abee00edb3fc1158f9ad6f44f0f6be8
好的,所以我知道我来晚了,但希望其他人能从中受益。
Windows 服务无法与具有 GUI 或需要用户交互的任何内容进行交互。基本上,当您调用 Process.Start(start)
时,它会尝试打开服务无法执行的 CMD window。您可以使用类似的东西:
start.UseShellExecute = false;
// Do not create the black window.
start.CreateNoWindow = true;//This stops the GUI
然而,值得注意的是,我尝试了几个小时来让这个特定的命令起作用,但没有成功。经过数小时的工作和研究,我最终放弃了整个想法。通常,您可以使用 .CreateNoWindow 从服务中执行 运行 CMD 命令,但在这种情况下它似乎不起作用(它无法找到 WBADMIN 进程)。如果我以后发现任何新的东西,我会更新。
这里有一个讨论 why services can't access GUIs 的帖子
string path = "D:";
string wbadminPath = Environment.SystemDirectory + @"\wbadmin";
string wbadminEvent = "start systemstatebackup -backupTarget:" + path + " -quiet";
try
{
int exitCode = 0;
ProcessStartInfo start = new ProcessStartInfo(wbadminPath, wbadminEvent);
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
exitCode = proc.ExitCode;
}
}
如果我在控制台应用程序中执行此代码,- 它有效。 如果我在 Windows 服务中执行此代码,我会遇到此错误:
Microsoft BLB 备份的命令行界面已停止工作
问题签名: 问题事件名称:APPCRASH 应用名称:wbadmin.exe 应用版本:6.0.6001.18000 申请时间戳:47918aed 故障模块名称:kernel32.dll 故障模块版本:6.0.6002.18327 故障模块时间戳:4cb73436 异常代码:c0000142 异常偏移:00009f7d OS版本:6.0.6002.2.2.0.274.10 区域设置 ID:1033 附加信息 1:9d13 附加信息 2:1abee00edb3fc1158f9ad6f44f0f6be8 附加信息 3:9d13 附加信息 4:1abee00edb3fc1158f9ad6f44f0f6be8
好的,所以我知道我来晚了,但希望其他人能从中受益。
Windows 服务无法与具有 GUI 或需要用户交互的任何内容进行交互。基本上,当您调用 Process.Start(start)
时,它会尝试打开服务无法执行的 CMD window。您可以使用类似的东西:
start.UseShellExecute = false;
// Do not create the black window.
start.CreateNoWindow = true;//This stops the GUI
然而,值得注意的是,我尝试了几个小时来让这个特定的命令起作用,但没有成功。经过数小时的工作和研究,我最终放弃了整个想法。通常,您可以使用 .CreateNoWindow 从服务中执行 运行 CMD 命令,但在这种情况下它似乎不起作用(它无法找到 WBADMIN 进程)。如果我以后发现任何新的东西,我会更新。
这里有一个讨论 why services can't access GUIs 的帖子