【问题标题】:wbadmin command can't run from windows servicewbadmin 命令无法从 Windows 服务运行
【发布时间】:2015-08-13 08:46:34
【问题描述】:
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 备份的命令行界面已停止工作

问题签名: 问题事件名称:APPRCASH 应用程序名称: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

【问题讨论】:

    标签: c# service console


    【解决方案1】:

    好的,所以我知道我提供帮助为时已晚,但希望其他人能从中受益。

    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 的帖子了

    【讨论】:

    • 这是真的,您不能在服务中使用 GUI,最好不要。如果你真的必须这样做,有一个解决方法。无需像您那样在 C# 中创建服务,而是将项目设置为标准命令行,然后使用 NSSM(非 suckicng 服务管理器)将其注册为服务 - 它是一个开源实用程序,可以将任何应用程序转换为 Windows 服务。
    猜你喜欢
    • 2014-04-06
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多