C#程序中以窗口模式调用命令行操作

需积分: 10 1 下载量 86 浏览量 更新于2024-09-20 收藏 27KB DOC 举报
"在C#中以窗口方式调用命令,通过用户界面输入参数并执行Dsadd命令创建用户。" 在C#编程中,有时我们需要调用操作系统内置的命令行工具来执行特定任务。这个例子中,我们看到了如何在C#中以窗口形式调用`dsadd`命令,一个用于Active Directory用户管理的命令行工具。通过将命令中的静态部分替换为变量,我们可以动态构建命令行参数,以便根据用户的输入自动生成命令。 首先,`dsadd`命令的基本结构是: ```shell dsadd user cn=<username>,dc=<domain>,dc=com –disable no ``` 在这个命令中,`<username>`是用户的名字,而`<domain>`是域的名称。在C#代码中,我们使用字符串格式化来构建这个命令,将`user`和`domain`作为变量传递: ```csharp private string addUser(string user, string domain, int iSecTimeOut) { string args = string.Format("user cn={0},dc={1},dc=com –disable no", user, domain); // ... } ``` 这里,`addUser`方法接收两个字符串参数`user`和`domain`,以及一个整型参数`iSecTimeOut`表示超时时间(以秒为单位)。`string.Format`方法用于将变量`user`和`domain`插入到命令字符串中。 接下来,我们使用`System.Diagnostics.Process`类来启动和控制外部进程。设置`FileName`属性为`dsadd`命令,`Arguments`属性为构建好的命令参数。为了控制命令的输出和错误,我们分别设置`RedirectStandardInput`, `RedirectStandardOutput`和`RedirectStandardError`为`true`。同时,`UseShellExecute`设为`false`以避免通过Shell启动,而`CreateNoWindow`设为`true`是为了不让进程创建新的窗口。 然后,通过`p.Start()`启动进程,并使用`p.WaitForExit(iSecTimeOut * 1000)`等待进程执行完成。如果进程在指定的超时时间内没有结束,`p.HasExited`仍为`false`,则会调用`p.Kill()`强制终止进程,并返回错误信息。 在正常情况下,`p.StandardOutput.ReadToEnd()`可以用来获取命令的输出结果,但在这个示例中,返回的是空字符串`string.Empty`,可能是因为在这个特定的应用场景中,不需要处理`dsadd`命令的输出。 总结来说,这个C#代码片段展示了如何在Windows应用程序中,通过用户界面收集数据,然后调用命令行工具执行操作。这种方法常用于集成系统功能或自动化特定任务,例如这里的Active Directory用户管理。理解如何安全、有效地调用这些命令对于开发与系统交互的C#应用至关重要。