#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, но код сейчас работает. Спасибо всем, кто просмотрел этот вопрос.