Как вызвать консольное приложение от имени другого пользователя, используя службу Windows, работающую в локальной системе? - PullRequest
0 голосов
/ 06 декабря 2018

Я в основном пытаюсь создать и запустить службу Windows на сервере.Эта служба имеет в основном 2 задания:

  1. Для регистрации метки времени в файле на UNC (другой путь к серверу), чтобы проверить доступ
  2. Вызов простого консольного приложения с использованием другогоuser

Теперь я создал службу Windows, но она не будет регистрировать путь к серверу, так как он запускается через локальную систему.Поэтому я попытался развернуть его, используя учетную запись пользователя с доступом к пути к серверу, и он вошел в систему, но тогда все дело в локальной системе.

Итак, теперь я немного изменил требование. Теперь возможно развернуть службу только как локальная система, но вместо прямой регистрации по пути к серверу я бы предпочел, чтобы консольное приложение выполняло ведение журнала.,Но как мне заставить консольное приложение работать под другой учетной записью пользователя.

Это код, который я использую для вызова консольного приложения через другого пользователя (учтите, что служба запускается под LocalSystem), и этолибо выдает ошибку «Не удается найти указанный файл», либо «Неверное имя каталога», но я уверяю вас, что обе вещи существуют.Я даже использовал пути, введенные в startInfo, для отладки, чтобы проверить.

public static void InitiateCommandProcess()
    {            
        Process process = new Process();
        SecureString ssPwd = new SecureString();
        string fileName = ConfigurationManager.AppSettings["FileName"];
        string workingDirectory = ConfigurationManager.AppSettings["ApplicationDirectory"];
        string param = ConfigurationManager.AppSettings["PARAM"];            
        string userName = "myUserName";
        string password = "MyPassWord";            

        for (int x = 0; x < password.Length; x++)
        {
            ssPwd.AppendChar(password[x]);
        }

        ProcessStartInfo startInfo = new ProcessStartInfo
        {
            UseShellExecute = false,
            WindowStyle = ProcessWindowStyle.Hidden,
            CreateNoWindow = true,
            ErrorDialog = false,
            FileName = @"" + fileName,
            WorkingDirectory = @"" + workingDirectory,                
            Arguments = @"" + param,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            RedirectStandardInput = true,
            Domain = "EMEA",
            UserName = userName,
            Password = ssPwd                
        };

        process.StartInfo = startInfo;
        try
        {
            Logger.Log($"Working in Directory Path : {workingDirectory} );");
            Logger.Log($" Username : {userName} and Executing : {fileName}");
            process.Start();
            Logger.Log($"Process \"{ConfigurationManager.AppSettings["FileName"]}\" Executed at {DateTime.Now}");
        }
        catch (Exception ex)
        {
            Logger.Log($"Error occured in command process execution, Message : {ex.Message}", true);
        }
    }

Путь к серверу такой, "\ dfs \ folder \ folder ..."

Янемного нового для этого, так что, пожалуйста, потерпите меня.

...