通过MIM .dll

问题描述

我目前拥有的是metaverse的MIM .dll扩展名,需要调用命令行来运行一些控制台命令。这些控制台命令用于Web工具GAM,它将创建G-Suite用户。我有一个内置的.NET Framework 4.7.2测试控制台应用程序,可以正常工作。当使用我的.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:\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调用该应用程序,它将无法起作用。我很茫然,我无法弄清楚从扩展程序运行和从应用程序运行之间有什么区别。

另一方面,我构建了一个更加简单的控制台应用程序,该应用程序只写入文件。我能够从.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时,但是代码现在可以正常工作了。谢谢所有查看此问题的人。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...