C# wbadmin命令可以';无法从windows服务运行

C# wbadmin命令可以';无法从windows服务运行,c#,service,console,C#,Service,Console,如果我在控制台应用程序中执行此代码,-它可以工作。 如果在Windows服务中执行此代码,则会出现以下错误: Microsoft BLB备份的命令行界面已停止工作 问题签名: 问题事件名称:APPCRASH 应用程序名称:wbadmin.exe 应用程序版本:6.0.6001.18000 应用程序时间戳:47918aed 故障模块名称:kernel32.dll 故障模块版本:6.0.6002.18327 故障模块时间戳:4cb73436 异常代码:c0000142 异常偏移量:00009f7d

如果我在控制台应用程序中执行此代码,-它可以工作。 如果在Windows服务中执行此代码,则会出现以下错误:

Microsoft BLB备份的命令行界面已停止工作

问题签名: 问题事件名称: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:1ABEE000EDB3FC1158F9AD6F44F0F6BE8

好的,所以我知道我要迟到了,希望其他人能从中受益

Windows服务无法与任何具有GUI或需要用户交互的对象进行交互。基本上,当您调用
Process.Start(Start)
时,它会尝试打开CMD窗口,而这是服务无法做到的。您可以使用以下内容:

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;                    
            }
        }
然而值得注意的是,我花了几个小时试图让这个特殊的命令发挥作用,但没有成功。经过数小时的工作和研究,我最终放弃了整个想法。通常,您可以使用.CreateNoWindow从服务运行CMD命令,但是在这种情况下它似乎不起作用(它无法找到WBADMIN进程)。如果我以后发现这方面有什么新的东西,我会更新的

这里有一个帖子在谈论更多

            start.UseShellExecute = false;
            // Do not create the black window.
            start.CreateNoWindow = true;//This stops the GUI