Невозможно вызвать cmd.exe из любого приложения, когда оно вызывается через MIM .dll

#c# #c#-4.0 #dll #cmd #google-workspace

#c# #c #-4.0 #dll #cmd #google-workspace

Вопрос:

В настоящее время у меня есть расширение MIM .dll для метавселенной, которое должно вызывать командную строку для запуска некоторых консольных команд. Эти консольные команды предназначены для GAM-вызова веб-инструмента, который создаст пользователей G-Suite. У меня есть встроенное приложение для тестирования консоли.NET Framework 4.7.2, который работает просто отлично. При запуске кода с my .dll он, кажется, обрабатывается нормально, даже возвращает положительный код выхода 0, но не выполняет ожидаемую функцию в cmd. .dll находится в .NET Framework 4.5. Блок кода одинаков для обоих приложений:

 using (Process gamProcess = new Process())
            {
                gamProcess.StartInfo.UseShellExecute = false;
                gamProcess.StartInfo.RedirectStandardOutput = true;
                gamProcess.StartInfo.FileName = @"C:WindowsSystem32cmd.exe";
                gamProcess.StartInfo.CreateNoWindow = true;
                gamProcess.StartInfo.Arguments = "/c gam create user "   username   " firstname "   firstname   " lastname "   lastname   " password "   pass;
                gamProcess.Start();
                gamProcess.WaitForExit();
            }
  

Если я вызываю этот блок кода непосредственно из .dll, он будет действовать так, как будто он выполняет действие, но ничего не происходит. Если я вызываю этот код из автономного приложения, он работает просто отлично. Я даже попытался просто вызвать это приложение из .dll и передавать аргументы непосредственно в нее. Это сработает, если я задам аргументы в Visual Studio, но это не сработает, если я вызову приложение из .dll. Я в недоумении, я не могу понять, в чем разница между запуском из моего расширения и запуском из приложения.

Еще одно замечание, я создал еще более упрощенное консольное приложение, которое просто записывает данные в файл. Я смог вызвать это приложение из .dll, и это работает просто отлично. Это только команды выше, которые .dll, похоже, не хочет правильно обрабатывать.

Ответ №1:

Мне удалось исправить приведенный выше код. Я сделал две вещи одновременно, поэтому я не уверен, что было ключом к этой проблеме, но сейчас она работает безупречно. Я изменил / c в коде на / C в верхнем регистре. Теперь код выглядит следующим образом:

 using (Process gamProcess = new Process())
        {
            gamProcess.StartInfo.UseShellExecute = false;
            gamProcess.StartInfo.RedirectStandardOutput = true;
            gamProcess.StartInfo.FileName = @"C:WindowsSystem32cmd.exe";
            gamProcess.StartInfo.CreateNoWindow = true;
            gamProcess.StartInfo.Arguments = "/C gam create user "   username   " firstname "   firstname   " lastname "   lastname   " password "   pass;
            gamProcess.Start();
            gamProcess.WaitForExit();
        }
  

Вторым действием, которое я выполнил, был перезапуск сервера разработки, над которым я работал. Я не уверен, что сработало, тем более, что в моем консольном приложении я запускал строчный / c, но код сейчас работает. Спасибо всем, кто просмотрел этот вопрос.