本文将介绍Run As(运行方式) 的几种代码实现方式,包括Python和C#。希望大家能从中受益。

1,引进

最近由于项意图原因,需求在自动化测验代码中完成用户人物的切换,天然第一印象就想到了Run As(中文版windows中也叫“运转办法”)。比方咱们能够在翻开IE浏览器的时分右键单击“运转办法”:

浅谈Python和C#中的Run As代码完成方法  Python C# Run As 第1张

然后输入一个新的用户帐户,如下图:

浅谈Python和C#中的Run As代码完成方法  Python C# Run As 第2张

上图中我本机运用的是域帐户本地帐户登陆的操作系统,可是我现在需求运用域帐户来运转IE浏览器,以便利我在翻开相应的绑定域帐户权限的页面,如公司内部站点。这样就不用在翻开相应的页面时分输入域帐户名了。

有些时分咱们也能够运用相同的办法来运用管理员帐户发动相应的运用程序:

浅谈Python和C#中的Run As代码完成方法  Python C# Run As 第3张

在较近操作系统中,右键菜单中没有了“Run As”,而是变成了“Run As Administrator”,意图是进步运转相应程序的用户权限:

浅谈Python和C#中的Run As代码完成方法  Python C# Run As 第4张

好了,言归正传,今日笔者说到的则是运用代码来完成相同的功用,即以更改运转程序的用户帐户。

2,代码完成指令行Run As

指令行

用指令行完成上述的Run as功用大致能够这样写:

Runas /user:user@domain.com "C:\Program Files\Internet Explorer\iexplore.exe"

Python完成

RunAsWithinPython.py文件内容如下:

-->importos
os.system("runas/user:user@domain.com
\"C:\ProgramFiles\InternetExplorer\iexplore.exe\"")

额,就这两行,看起来比指令行内容多不了几个字符,不得不惊诧Python的强悍。别的,Python运用缩进来表明代码层次而不是咱们在C#等言语顶用的大括号“{”,代码看起来很爽,当然,这是闲话了。

C#完成

Program.cs文件内容如下:

usingSystem.Diagnostics;

namespaceMainTest
{
classProgram
{
publicstaticvoidMain(string[]args)
{
System.Diagnostics.Processcmd=System.Diagnostics.Process.Start("runas",
"/user:user@domain.com\"C:\\ProgramFiles\\InternetExplorer\\iexplore.exe\"");
}
}
}

恩,C#体现也不错,看来确实是一个比较简略的指令罢了,假如你没有运转一下这两个程序,你或许认为这样就搞定了,适当简略。可是假如你是一个仔细的人,或许你是用过runas指令行的话,你应该知道,这里有问题:

很可惜的是,这两种办法存在一个丧命的缺点:只能在第一个指令行中输入用户名,然后才会由系统提示输入暗码,这样就不能在一条指令行中将用户名和暗码彻底包括。这样咱们只能运用代码完成一半,别的一半则依然需求手动输入(暗码)——明显这就造成了一个半拉子工程。咱们也能够检查一下runas协助阐明:

浅谈Python和C#中的Run As代码完成方法  Python C# Run As 第5张

这样规划的意图在于避免像咱们这种弱弱的想要运用指令行来进步运转程序的权限的人——至少咱们是不能运用批处理文件来干这件事了,这样更安全了,不是吗?好吧,接下来,咱们将运用别的一种办法,这种办法则不会呈现上述半拉子工程的为难状况。

3, 运用Process的ProcessStartInfo完成

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Diagnostics;

namespaceMainTest
{
classProcessUserLogonHelper
{
///
///在Main函数中调用该办法的的示例代码
///
privatevoidInvokeExample()
{
ProcessUserLogonHelperphelper=newProcessUserLogonHelper();
Processpro=phelper.CreateProcessWithUserToken(@"C:\ProgramFiles\InternetExplorer\iexplore.exe","bestreme.com","chdwu","************");
pro.Start();
}

///
///运用指定帐户绑定进程
///
///进程的宿主程序
///指定帐户的域名
///指定帐户的用户名
///指定帐户的暗码
///绑定了特定帐户的进程
publicProcessCreateProcessWithUserToken(stringappPath,stringdomain,stringuserName,stringpassword)
{
Processpro=newProcess();
ProcessStartInfoprocessInfo=newProcessStartInfo(appPath);
processInfo.UseShellExecute=false;
processInfo.UserName=userName;
processInfo.Domain=domain;
System.Security.SecureStringpsw=newSystem.Security.SecureString();
foreach(charcinpassword.ToCharArray())
{
psw.AppendChar(c);
}
processInfo.Password=psw;
processInfo.WorkingDirectory=System.IO.Path.GetDirectoryName(appPath);
pro.StartInfo=processInfo;
returnpro;
}

///
///运用指定帐户绑定进程
///
///进程的宿主程序
///指定本地帐户的用户名
///指定帐户的暗码
///绑定了特定帐户的进程
publicProcessCreateProcessWithUserToken(stringappPath,stringuserName,stringpassword)
{
returnCreateProcessWithUserToken(appPath,"",userName,password);
}
}
}

上面的代码有几个当地需求指出的是:

1,应该待运转的程序指定相应的发动途径,不然的话在上述代码运转的过程中或许提示“目录不存在”;

2,Domain能够不设置,而直接运用bestreme\chdwu的办法给UserName赋值即可;

3,UseShellExecute应该设置为False

4,ProcessStartInfo中的password是System.Security.SecureString类型的,所以假如咱们仅仅传入了一个string作为password,咱们应该将其转换为正确的类型。

结束语

上面为我们介绍了几种Run as的完成办法,其间的前面两种分别用Python和C#完成了指令行Run as的功用,第三种办法则是在ProcessStartInfo中加入了用户信息以完成用指定用户发动运转运用程序。

当然完成Run as的代码完成办法许多,鄙人一篇中将介绍一下有关运用Win32 API的完成。需求指出的是,运用Win32 API几种完成办法存在着一些潜在的问题,具体内容将赶快鄙人一篇文章中给我们展现。

【修改引荐】

  1. Python反常处理系统简介
  2. 在Python中处理中英文稠浊犯错的问题
  3. 怎么编写Unix管道风格的Python代码
转载请说明出处
知优网 » 浅谈Python和C#中的Run As代码完成方法

发表评论

您需要后才能发表评论