所以我有基本的胜利表格,你输入用户名/密码,然后尝试登录。
ProcessStartInfo start = new ProcessStartInfo();
start.Verb = "runas";
start.UserName = uName;
start.Password = uPass;
start.Domain = "MyDomain";
start.UseShellExecute = false;
start.Arguments = "";
start.FileName = @"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe";
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
Process proc = Process.Start(start);
除非输入错误密码,否则所有工作都很顺利。此时,似乎该进程一直尝试以错误密码开始,或者进程开始时一直尝试启动指定的应用程序给定的凭据,由于尝试失败太多而锁定用户帐户。这不是我的代码循环,来自我的代码的一次调用等于无休止的登录尝试(好吧,直到我停止整个应用程序)。 ProcessStartInfo用户没有任何参数可以让我说“只尝试一次”#。
那么我如何将其限制为仅使用给定密码的一次尝试?
为了扩展这一点,因为评论,我在start.CreateNoWindow = true;
上设置了一个断点,只有一次点击。我点击继续,之后,下一行会抛出错误,说密码错误。我再次点击继续,同一行引发了另一个错误。也许最好是说他们是一个进行多次尝试的过程,我想限制为一次尝试。
修改
虽然这并没有对以传统方式进行的尝试次数施加限制,但它会在一次失败后停止尝试。
更改
Process proc = Process.Start(start);
要
Process proc = null;
try
{
proc = Process.Start(start);
}
catch (Win32Exception e)
{
if(proc != null)
{
proc.Close();
}
}
当然,它应该被修改以适当地处理不同的错误,等等。
即使在抛出错误之后该进程仍然存在,我认为Process.Start()成功创建了进程,并且它是继续进行登录尝试的新进程。
我仍然希望有一些方法以更传统的方式限制它。我还担心,如果以这种方式产生多个进程,这是不安全的。