Интересно, может ли кто-нибудь помочь мне понять, почему мой Process
не работает и не генерирует ошибку.C# System.Diagnostics.Process не делает ничего или не делает ошибку
Код, приведенный ниже, должен проходить через каталог, находить все файлы с расширением sqb
и для каждого файла запускать Process
в качестве учетной записи пользователя, которая имеет повышенные привилегии на сервере.
Процесс должен запускать исполняемый файл sqb2mtf.exe
из той же папки, в которой находятся файлы, например, sqb2mtf.exe file.sqb file.bak
.
Если я использую Visual Studio 2013 и прохожу через код, я вижу, что каждый файл зацикливается, и появляется сообщение Process
, но файлы не преобразуются, и никаких ошибок, представленных переменной readToEndError
.
var directory = new DirectoryInfo(@"D:\inetpub\Import\");
foreach (var file in directory .EnumerateFiles("*.sqb"))
{
var convert = Path.GetFileNameWithoutExtension(file.ToString());
var process = new Process
{
StartInfo =
{
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardInput = true,
RedirectStandardError = true,
FileName = @"D:\inetpub\Import\sqb2mtf.exe",
UserName = "myUserName",
Domain = "myDomain",
Password = GetSecureString("myPassword"),
Arguments = @"D:\inetpub\Import\" + file + " " + @"D:\inetpub\Import\" + convert + ".bak"
}
};
process.Start();
string readToEndOutput = process.StandardOutput.ReadToEnd();
string readToEndError = process.StandardError.ReadToEnd();
process.WaitForExit();
}
Я схожу ума, любой совет, чтобы решить это было бы оценено :-)
Update
var directoryInfo = new DirectoryInfo(BackupDirectory);
foreach (var file in directoryInfo.EnumerateFiles("*.sqb"))
{
var convert = Path.GetFileNameWithoutExtension(file.ToString());
var fileName = BackupDirectory + "sqb2mtf.exe";
var arguments = "\"" + BackupDirectory + file + "\" \"" + BackupDirectory + convert + ".bak\"";
var process = new Process
{
StartInfo =
{
CreateNoWindow = true,
UseShellExecute = true,
RedirectStandardOutput = false,
RedirectStandardInput = false,
RedirectStandardError = false,
FileName = fileName,
Arguments = arguments
}
};
process.Start();
process.WaitForExit();
file.Delete();
}
Одна вещь, опираясь на от комментариев по InBetween
это необходимость кавычек, в этом случае кавычки должны окружать два отдельных файла.
Я могу подтвердить, что этот код действительно работает на IISExpress, выдавая себя за другого пользователя, к сожалению, просто не IIS 7.5.
Рабочий стол должен был переместить этот код в консольное приложение и установить его на соответствующий сервер, а затем использовать задачу расписания Windows для запуска в качестве конкретной учетной записи.
Проверка работоспособности: Работает ли она при запуске команды из 'cmd'? 'stdout' тоже пуст? Возвращает ли процесс код выхода 0 или что-то еще? Если все это хорошо проверяется, у вас должны быть некоторые проблемы с 'UserName',' Domain' или 'Password'. –
Попробуйте установить CreateNoWindow = false, чтобы вы могли видеть, что происходит, когда exe запускается. Это может быть ошибка или сообщение, которое вы можете увидеть в прошлом. После того, как вы это сделаете, вы можете скрыть окно. –
Если я установил CreateNoWindow в false, я не получу окно, если я пропущу имя пользователя, я получаю сообщение об ошибке «Ошибка входа в систему: неизвестное имя пользователя или неверный пароль», поэтому я бы предположил, что правильно или неправильно, если я не получу эту ошибку домен, имя пользователя и пароль работают правильно. – iggyweb