开始一个过程

时间:2015-11-04 00:49:02

标签: c# automation

作为SharePoint自动化测试的一部分,我尝试使用System.Diagnostics.Process以另一个用户身份打开Internet Explorer。以下是C#代码

System.Diagnostics.Process p = new System.Diagnostics.Process();

// Domain and User Name:
p.StartInfo.Domain = "MYDOMAIN";
p.StartInfo.UserName = "myusername";

// Command to execute and arguments:
p.StartInfo.FileName = "C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe";
p.StartInfo.Arguments = "http://url/AllItems.aspx";

// Build the SecureString password...
System.String rawPassword = "thepassword";
System.Security.SecureString encPassword = new System.Security.SecureString();
foreach (System.Char c in rawPassword)
{
    encPassword.AppendChar(c);
}

p.StartInfo.Password = encPassword;

// The UseShellExecute flag must be turned off in order to supply a password:
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = false;

p.Start();

当我运行此自动化测试时,Visual Studio会返回通知我测试成功,但Internet Explorer无法打开。

我的代码中是否有某些内容因为窗口出现而丢失?在测试运行之前没有运行iexplore进程。

2 个答案:

答案 0 :(得分:1)

在文件路径周围放置双引号(因为它包含空格)可能会有所帮助:

p.StartInfo.FileName = "\"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe\""
                        ^^                                                        ^^

此外,如果您打算从服务进程启动此操作,或者在“SharePoint”等服务中运行dll,则此代码可能无法在所需的桌面中启动该进程。您需要在启动信息中将桌面设置为"winsta0\\default"

答案 1 :(得分:1)

要运行进程,工作进程应具有高权限,这不是任何Web应用程序中的理想情况。如果您的目的是使用IE进行单元测试,那么我会考虑使用WaitIN之类的东西。如果您的目的是让应用程序逻辑访问URL并执行某些操作,请考虑使用HttpWebRequest。如果您仍需要启动进程,则创建Windows服务,然后公开Web呼叫,以便在Share Point中,您只需拨打电话,您的Windows服务就可以在本地帐户或其他高权限帐户上运行。

希望这会有所帮助,请提供您想要启动IE的方案,并在论坛中为您提供更好的答案。