я написал программу под названием «CopyFile», чтобы скопировать файл из локальной в сетевой папке общий раз, как показано ниже:C#: Разница между выполнением программы напрямую и позвонить другим процессом
List<string> log = new List<string>();
string originPath = "*LOCAL PATH*";
string targetPath = "*TARGET PATH*";
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
if (File.Exists(originPath))
{
p.Start();
StreamWriter sw = p.StandardInput;
sw.WriteLine(@"NET USE *TARGET IP* *PASSWORD* /USER:*USERNAME*");
sw.WriteLine(@"COPY "+'"'+originPath+'"'+ " "+'"'+targetPath+'"');
sw.WriteLine("Y");
sw.WriteLine("EXIT");
sw.Close();
p.WaitForExit();
log.Add(p.StandardOutput.ReadToEnd());
}
else
{
log.Add("No file");
}
Я попытался эту программу на моем компьютере, если я запустил эту программу, дважды щелкнув по ней успешно выполненную программу. Но если я использую другую программу C# или планировщик задач Windows для вызова и ее выполнения. Программа не может работать нормально. Я проверил файл журнала, чтобы увидеть результат. Журнал двойного щелчка и выполнить его показывает:
D:\Downtime>NET USE *TARGET IP* *PASSWORD* /USER:*USERNAME*
The command complete successfully.
D:\Downtime>COPY *originpath* *targetpath*
1 file(s) copied.
D:\Downtime>EXIT
Но если я использую другие C# программы или окно планировщик задач для его выполнения, журнал показывает
C:\Windows\system32>NET USE *TARGET IP* *PASSWORD* /USER:*USERNAME*
C:\Windows\system32>COPY *originpath* *targetpath*
0 file(s) copied.
C:\Windows\system32>EXIT
Похоже, если я называю его другим программа или планировщик задач Windows, «cmd.exe» не выполнит команду «NET USE», поэтому я не могу подключиться к сетевому компьютеру и скопировать файлы на него. Кто-нибудь знает, в чем проблема? Благодарю.
Диски отображаются на токене пользователя. У админов есть два AsAdmin и Limited. Однако вам не нужно ничего делать. 'copy '\\ servername \ sharename \ folder \ file.ext" "\\ servername \ sharename \ folder \ file.ext" '. Сопоставление дисков - это совместимость для программ pre windows 95, которые люди не переставали использовать. –
Скорее всего, сообщение об ошибке, генерируемое командой «NET USE», записывается в «StandardError». Вы также должны будете захватить этот вывод, если хотите посмотреть, что он говорит. –