如何解决通过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时,但是代码现在可以正常工作了。谢谢所有查看此问题的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。