当通过 MIM .dll 调用时,无法从任何应用程序调用 cmd.exe
Cannot call cmd.exe from any application when it is called via the MIM .dll
我目前拥有的是 Metaverse 的 MIM .dll 扩展,需要调用命令行以 运行 某些控制台命令。这些控制台命令用于调用 GAM 的 Web 工具,该工具将创建 G-Suite 用户。我有一个内置 .NET Framework 4.7.2 的测试控制台应用程序,运行良好。当 运行 将代码与我的 .dll 结合使用时,它似乎处理得很好,甚至 returns 正退出代码 0,但没有执行预期的 cmd 中的功能。 .dll 在 .NET Framework 4.5 中。两个应用程序的代码块相同:
using (Process gamProcess = new Process())
{
gamProcess.StartInfo.UseShellExecute = false;
gamProcess.StartInfo.RedirectStandardOutput = true;
gamProcess.StartInfo.FileName = @"C:\Windows\System32\cmd.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 调用应用程序,它将不起作用。我在这里不知所措,我无法弄清楚我的扩展 运行ning 和应用程序 运行ning 之间有什么区别。
另一方面,我构建了一个更简单的控制台应用程序,它只写入一个文件。我能够从 .dll 调用这个应用程序,它工作得很好。只有上面的命令,.dll 似乎不想正确处理。
我设法修复了上面的代码。我同时做了两件事,所以我不确定哪个是这个问题的关键,但它现在工作得很好。我将代码中的 /c 更改为 /C 大写。代码现在如下所示:
using (Process gamProcess = new Process())
{
gamProcess.StartInfo.UseShellExecute = false;
gamProcess.StartInfo.RedirectStandardOutput = true;
gamProcess.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
gamProcess.StartInfo.CreateNoWindow = true;
gamProcess.StartInfo.Arguments = "/C gam create user " + username + " firstname " + firstname + " lastname " + lastname + " password " + pass;
gamProcess.Start();
gamProcess.WaitForExit();
}
我执行的第二个操作是重新启动我正在处理的开发服务器。我不确定哪个有效,特别是因为我在我的控制台应用程序中 运行 是一个小写的 /c,但代码现在可以正常工作了。谢谢所有看过这个问题的人。
我目前拥有的是 Metaverse 的 MIM .dll 扩展,需要调用命令行以 运行 某些控制台命令。这些控制台命令用于调用 GAM 的 Web 工具,该工具将创建 G-Suite 用户。我有一个内置 .NET Framework 4.7.2 的测试控制台应用程序,运行良好。当 运行 将代码与我的 .dll 结合使用时,它似乎处理得很好,甚至 returns 正退出代码 0,但没有执行预期的 cmd 中的功能。 .dll 在 .NET Framework 4.5 中。两个应用程序的代码块相同:
using (Process gamProcess = new Process())
{
gamProcess.StartInfo.UseShellExecute = false;
gamProcess.StartInfo.RedirectStandardOutput = true;
gamProcess.StartInfo.FileName = @"C:\Windows\System32\cmd.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 调用应用程序,它将不起作用。我在这里不知所措,我无法弄清楚我的扩展 运行ning 和应用程序 运行ning 之间有什么区别。
另一方面,我构建了一个更简单的控制台应用程序,它只写入一个文件。我能够从 .dll 调用这个应用程序,它工作得很好。只有上面的命令,.dll 似乎不想正确处理。
我设法修复了上面的代码。我同时做了两件事,所以我不确定哪个是这个问题的关键,但它现在工作得很好。我将代码中的 /c 更改为 /C 大写。代码现在如下所示:
using (Process gamProcess = new Process())
{
gamProcess.StartInfo.UseShellExecute = false;
gamProcess.StartInfo.RedirectStandardOutput = true;
gamProcess.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
gamProcess.StartInfo.CreateNoWindow = true;
gamProcess.StartInfo.Arguments = "/C gam create user " + username + " firstname " + firstname + " lastname " + lastname + " password " + pass;
gamProcess.Start();
gamProcess.WaitForExit();
}
我执行的第二个操作是重新启动我正在处理的开发服务器。我不确定哪个有效,特别是因为我在我的控制台应用程序中 运行 是一个小写的 /c,但代码现在可以正常工作了。谢谢所有看过这个问题的人。