作为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进程。
答案 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的方案,并在论坛中为您提供更好的答案。