Скопируйте файл в сетевой путь с помощью службы Windows с помощью cmd файла

Я пытаюсь скопировать файл xml из локальной папки в общий путь, используя код С# в моей службе Windows.

Он вызывает файл CMD и возвращает Access Denied. Но то же самое работает, если я пытаюсь скопировать на локальный.

private void CopyFile(string path)
    {
        try
        {

            Process process = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo();                
            startInfo.UseShellExecute = false;
            startInfo.FileName = Path.Combine(Environment.CurrentDirectory, "Batch", "Run.cmd");
            startInfo.Arguments = "/c " + path;                               
            startInfo.RedirectStandardError = true;
            startInfo.RedirectStandardOutput = true;

            process = Process.Start(startInfo);
            process.WaitForExit();
            string output = process.StandardOutput.ReadToEnd();
            string error = process.StandardError.ReadToEnd(); // ACCESS DENIED
            int  exitCode = process.ExitCode; // 1


            process.Close();

        }
        catch (Exception ex)
        {
            string x = ex.Message;
        }
    }

Run.cmd

@set sourcePath=%1

copy /y %sourcePath%\MyTest.xml \\networksharedPath\XML\MyTest.xml

Установщик проекта службы Windows настроен на использование учетной записи LocalSystem.

Как заставить службу скопировать файл из локальной папки на общий компьютер? Любые проблемы с кодом С# или установкой Windows Process Installer?

Примечание: вручную щелкнуть копии файлов cmd в общей папке. Если я изменяю как сетевую службу и запускаю, я получаю такую ​​же ошибку Access is Denied. Пробовал шаги настройки, приведенные в qaru.site/info/17057/... Но не повезло..

Ответ 1

Локальная система обычно не имеет доступа к сетевым ресурсам по умолчанию. Попробуйте запустить службу под своим аккаунтом. Ручным запуском cmd файла он запускается под вашей учетной записью, а не под учетной записью LocalSystem. Он не будет бросать никаких исключений, пока он работает как собственный процесс. Поэтому, возможно, вы также можете отслеживать вывод консоли здесь.