2012-08-09 103 views
0

我对编码相当陌生,但已经构建了一些小东西。我在最后一个项目中想到的一件事是如何运行2个通常从控制台运行的简单命令,而是从表单应用程序中运行。简单地说,窗体有2个按钮,单击一个会导致运行ipconfig,而另一个则会导致ipconfig /all。然后它将来自命令的IP信息发布到我创建的另一个表单中作为消息框。这很重要,因为我正在尝试做类似的事情,现在没有任何工作。如何从C#Windows窗体内运行命令行代码?

我有一个表格有一个用户名和密码点。在提交,我希望它本质上运行以下命令:

NET USE F: \\ALPHA\CLIENTAPPS /user:domain\%username% %password% /persistent:no 
NET USE O: \\ALPHA\USERS /user:domain\%username% %password% /persistent:no 
NET USE S: \\ALPHA\COMPANY /user:domain\%username% %password% /persistent:no 

%username%%password%从形式和域捕获将成为我们的实际域。

使用类似的方法来处理上述ipconfig程序,这是我想出的。然而,当我点击提交按钮,没有任何反应,没有错误,也没有实际创建网络共享:

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    string un = txtUsername.Text; 
    string pw = txtPassword.Text; 

    System.Diagnostics.ProcessStartInfo PR = new System.Diagnostics.ProcessStartInfo("cmd", @" /c net use W: \\\\ALPHA\\CLIENTAPPS /user:acsdish\\" + un + " " + pw + "/persistent:no"); 
    PR.RedirectStandardOutput = true; 
    PR.UseShellExecute = false; 
    PR.CreateNoWindow = true; 
    System.Diagnostics.Process StartPR = new System.Diagnostics.Process(); 
    StartPR.StartInfo = PR; 
    StartPR.Start(); 
} 

缺少什么我在这里,还是有更好的办法?谢谢。

迈克

+0

这可能有助于:http://stackoverflow.com/questions/4807097/start-a-command-line-including-arguments-from-c-sharp – Almo 2012-08-09 21:41:09

回答

3

什么也没有发生,没有错误,也没有它实际上创建了网络共享

Y你已经做了很多事情来确保。 “没有错误”很容易解释,你不要检查的错误,也不让你的用户看到他们的方式,因为你确保控制台窗口不可见。如果命令失败,它将不可见。检查Process.ExitCode是最低要求。

下一个缺陷是您创建映射到特定用户的共享。这很好,驱动器映射是按用户设置的。但是你并没有真正以该用户身份登录,所以你不能参见这些映射。您必须按Ctrl + Alt + Del并切换用户帐户。但是,这是一个失败的原因,因为你通过/持久:不。这意味着“用户登录时持续存在”。

最终的缺陷是,你把它留给另一个过程来照顾它。这总是会丢失关键信息,尤其是错误。您应该安装Windows API函数,以便您在不知道的情况下知道,并且不会耗费巨大的周期来运行其他进程。 Pinvoke WNetAddConnection2()。

+0

您的信息是有帮助的,所以谢谢你。实际上,在我发布和实际检查回来之间,我发现其他地方的想法是使用API​​是更好的选择。我确实发现这个[link] http://www.codeproject.com/Articles/6847/Map-Network-Drive-API?msg=4334657#xx4334657xx这似乎很好。我能够使用核心和修改来适应我的需求。但是,这似乎是使用旧的WNetAddConnection。我会检查2,看看这是否更实用,或者更确切地说,如果我可以轻松搞定。再次感谢。 – shelzmike 2012-08-10 14:04:09

+0

我试图让WNetAddConnection2()工作时遇到更多问题;然而,它与我最初询问的具体问题无关,因此我将搜索答案,如果找不到答案,我会发布另一个与使用该函数相关的专门问题。再次感谢! – shelzmike 2012-08-10 18:06:00

4
System.Diagnostics.ProcessStartInfo PR = new System.Diagnostics.ProcessStartInfo("cmd", @" /c net use W: \\\\ALPHA\\CLIENTAPPS /user:acsdish\\" + un + " " + pw + "/persistent:no"); 

尝试删除 “@”,或删除的 “\” 转义字符

Info here(逐字字符串)

+0

伟大的信息!它始终是提供最大利益的小事情。所以,基本上,如果我使用@我不必逃避\角色(或任何真正的)?再次感谢! – shelzmike 2012-08-10 14:06:33

+0

是的,没错。不客气, – dantix 2012-08-12 07:08:24