wbadmin命令无法从Windows服务运行

时间:2015-08-13 08:46:34

标签: c# service console

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 Backup的命令行界面已停止工作

问题签名:   问题事件名称:APPCRASH   应用程序名称:wbadmin.exe   应用版本:6.0.6001.18000   申请时间戳:47918aed   故障模块名称:kernel32.dll   故障模块版本:6.0.6002.18327   故障模块时间戳:4cb73436   例外代码:c0000142   异常抵消:00009f7d   操作系统版本:6.0.6002.2.2.0.274.10   区域设置ID:1033   附加信息1:9d13   附加信息2:1abee00edb3fc1158f9ad6f44f0f6be8   附加信息3:9d13   附加信息4:1abee00edb3fc1158f9ad6f44f0f6be8

1 个答案:

答案 0 :(得分:2)

好的,所以我知道我迟到会有所帮助,但希望其他人能从中受益。

Windows服务无法与具有GUI或需要用户交互的任何内容进行交互。基本上当你调用Process.Start(start)时,它会尝试打开服务无法执行的CMD窗口。你可以使用类似的东西:

            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的话题