我对编码很新,但已经构建了一些小东西。我在上一个项目中想到的一件事是如何运行通常从控制台运行的2个简单命令,而不是从表单应用程序中运行。简单地说,表单有2个按钮,单击一个按钮导致ipconfig
运行,另一个ipconfig /all
。然后它将来自命令的ip信息发布到我创建的另一个表单中作为消息框。这很重要,因为我正在尝试做类似的事情,现在没有任何工作。
我有一个表格,其中包含用户名和密码点。提交时,我希望它基本上运行以下内容:
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 :(得分:5)
System.Diagnostics.ProcessStartInfo PR = new System.Diagnostics.ProcessStartInfo("cmd", @" /c net use W: \\\\ALPHA\\CLIENTAPPS /user:acsdish\\" + un + " " + pw + "/persistent:no");
尝试删除“@”或删除“\”char
的转义Info here(逐字字符串文字)
答案 1 :(得分:3)
没有任何反应,没有错误,也没有实际创建网络共享
你已经做了很多工作来确保这一点。 “没有错误”很容易解释,你没有检查是否有错误,也没有为用户提供查看的方法,因为你确保了控制台窗口不可见。如果命令失败,则它将不可见。检查Process.ExitCode是一个最低要求。
接下来的缺陷是您为特定用户创建了共享的映射。哪个好,驱动器映射是按用户设置。但是您实际上并未以该用户身份登录,因此您无法查看这些映射。您必须按Ctrl + Alt + Del并切换用户帐户。但这是一个失败的原因,因为你通过/持久:没有。这意味着“在用户登录时持久”。
最终的缺陷是你将它留给另一个处理它的过程。这总会丢失关键信息,特别是错误。你应该调整执行此操作的Windows api函数,以便在知道时它不起作用,并且不会烧掉大量的周期来运行另一个进程。 Pinvoke WNetAddConnection2()。