Проблема с запуском командных файлов из моего приложения - PullRequest
0 голосов
/ 18 апреля 2019

Я пытался создать простое приложение для резервного копирования моих баз данных Windows Server, а также для резервного копирования всего сервера. Для этого я хочу использовать командные файлы, которые выполняются моим приложением. Я испробовал несколько подходов, но по какой-то причине он всегда терпел неудачу, поэтому я был бы рад, если бы вы могли мне помочь.

Пакетный файл BACKUPSERVER:

wbadmin start backup -backupTarget:D: -include:C: -allCritical -quiet

Я должен запустить летучую мышь как администратор, или она не работает из-за отсутствия разрешений.

C # код:

        static Task<int> RunProcessAsync(string fileName)
        {
        ............
        Process p = new Process();

        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.Verb = "runas";
        p.StartInfo.FileName = "cmd.exe";
        p.StartInfo.Arguments = "/C \"D:\\SQLBACKUP\\BACKUPSERVER.bat\"";
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        }

Отладка говорит: «wbadmin не найден». «Руны» активированы или нет, без разницы.

                 ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = fileName;

        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardError = true;
        startInfo.UseShellExecute = true;
        startInfo.CreateNoWindow = false;
       // startInfo.Verb = "runas";

        var process = new Process

        {

            StartInfo = { FileName = fileName },
            EnableRaisingEvents = true

        };
        process.StartInfo = startInfo;

        process.Exited += (sender, args) =>
        {
            tcs.SetResult(process.ExitCode);
            process.Dispose();
        };

        process.Start();

Также не работает.

Есть идеи?

EDIT: Я могу запускать такие команды, как завершение работы, но wbadmin не работает вообще ...

1 Ответ

0 голосов
/ 19 апреля 2019

Вот как я решил проблему:

  1. Убедитесь, что вы компилируете для 64-битной системы, если вы собираетесь использовать приложение в 64-битной системе, в противном случае оно будет перенаправлено в другие подпапки и не найдет wbadmin.exe.

  2. Запустите wbadmin с ProcessStart или запустите пакет, но без прямого ввода cmd, поэтому используйте его с filename = batch file или wbadmin с startInfo.Arguments:

        ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = fileName;
    
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;
    startInfo.UseShellExecute = true;
    startInfo.CreateNoWindow = false;
    

    // startInfo.Verb = "runas";

    var process = new Process
    
    {
    
        StartInfo = { FileName = fileName },
        EnableRaisingEvents = true
    
    };
    process.StartInfo = startInfo;
    
    process.Exited += (sender, args) =>
    {
        tcs.SetResult(process.ExitCode);
        process.Dispose();
    };
    
    process.Start();
    
  3. Убедитесь, что вы запрашиваете права администратора

...