VB怎么做到指定用户名来运行程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB怎么做到指定用户名来运行程序相关的知识,希望对你有一定的参考价值。

Shell可以运行指定程序。
比如:运行E:\Games.exe , 那么他默认的是在当前用户(一般是Administrator)来运行。
我的电脑还有其他用户:如:222用户
怎么用Shell来指定222这个用户来运行E:\Games.exe

先判断登陆的用户名,再执行就行了,代码如下:

Private Sub Command1_Click()
If Environ("USERNAME") = "Administrator" Then
'你想执行什么?
End If
If Environ("USERNAME") = "222" Then
Shell("E:\\Games.exe")
End If
End Sub

参考技术A 加上一个条件判断不就可以了么 参考技术B 从 Windows 2000 开始,微软的视窗操作系统开始提供给当前登录用户以不同的用户身份来运行程序的功能。前提是系统的 RunAs 服务(Windows 2000 下) / Secondary Logon 服务(Windows XP 下)没有被禁用并处于已启动状态。
  在必需的 RunAs / Secondary Logon 服务已经启动之后,就可以为程序设定用户身份。对于一般的可执行程序来说,只需要创建指向该可执行文件的快捷方式,然后在按住 Shift 键的同时鼠标右键单击快捷方式,然后单击“运行方式 ...”,在弹出的对话框中设置指定的用户及密码信息即可。这里是微软官方的 HOW TO 指南。
  但对于某些特殊类型的快捷方式来说,用 Shift + 鼠标右键唤出的菜单中并没有“运行方式 ...”的设置选项,比如说一些批处理文件(.bat)等有缺省文件类型打开方式的快捷连接。对于这种文件如果需要使用到 RunAs 的功能,可以新建一个空的快捷方式,在快捷方式向导对话框中键入项目的位置为 runas /savecred /usr:administrator "command line to the real application" 即可。其中 /usr: 后面的 administrator 表示以 administrator 用户身份运行程序;command line to the real application 填写实际程序的执行命令; /savecred 参数将自动保存输入的密码,这样在下一次运行快捷方式的时候就不需要再输入密码(该参数在 XP Home Edition 版本中无效),如果不希望系统保存密码去掉该参数即可。
RUNAS 用法:
RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
/user: program

RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
/smartcard [/user:] program

/noprofile 指定不应该加载用户的配置文件。
这会加速应用程序加载,但
可能会造成一些应用程序运行不正常。
/profile 指定应该加载用户的配置文件。
这是默认值。
/env 要使用当前环境,而不是用户的环境。
/netonly 只在指定的凭据限于远程访问的情况下才使用。

/savecred 用用户以前保存的凭据。
Windows XP Home Edition 上没有这个选项。
该选项会被忽略。
/smartcard 如果凭据是智能卡提供的,则使用这个选项。

/user 应使用 USER@DOMAIN 或 DOMAIN\USER 形式
program EXE. 的命令行。请参阅下面的例子

例如:
> runas /noprofile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad "my file.txt""

注意: 只在得到提示时才输入用户的密码。
注意: USER@DOMAIN 跟 /netonly 不兼容。
注意: /profile 跟 /netonly 不兼容。
其中mymachine可以通过我的电脑--属性--好像是第二个选项卡上面查到

刚启动电脑后直接进入受限帐户,使用runas命令时会出现"拒绝访问".
用户名,密码等都输入正确,但进一遍管理员用户后再回来则一切正常,请教下原因...
试试这个:runas /savecred /user:mymachine\administrator cmd

Runas
允许用户用其他权限运行指定的工具和程序,而不是用户当前登录提供的权限。

语法
runas [/profile /noprofile] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

参数
/profile
加载用户的配置文件。/profile 是默认值。
/no profile
/noprofile 指定不加载用户的配置文件。这使应用程序载入的更加快速,但是在一些应用程序中也会引起错误。
/env
指定当前使用的网络环境,而不是用户的本地环境。
/netonly
指明指定的用户信息只用于远程访问。
/smartcard
/smartcard 表示凭据是否是由智能卡提供的。
/showtrustlevels
列出 /trustlevel 开关项。
/trustlevel
指定应用程序运行所在的授权级别。使用 /showtrustlevels 查看可用的信任级别。
/user:UserAccountName
指定在其下运行程序的用户帐户的名称。用户帐户的格式应是 user@domain 或 domain\user。
程序
指定要用在 /user 中指定的帐户运行的程序或命令。
/?
在命令提示符显示帮助。
注释
管理员可以使用一个权限受限制的帐户执行日常、非管理性的任务,只有在执行特定管理任务时,才使用一个权限更大的帐户。要不经过注销再重新登录就完成这样的任务,可以用一般帐户登录,然后使用 runas 命令来运行需要更大权限的工具。
有关 runas 命令的使用范例,请参阅“相关主题”。
尽管 runas 通常由 Administrator 帐户使用,但并非仅限于 Administrator 帐户。任何拥有多个帐户的用户均可以利用备用凭据,使用 runas 运行程序、MMC 控制台或“控制面板”项。
如果要在计算机上使用 Administrator 帐户,对于 /user:,键入下列参数之一:
/user:AdministratorAccountName@ComputerName

/user:ComputerName\AdministratorAccountName

如果想以域管理员身份使用这个命令,键入下列参数之一:
/user:AdministratorAccountName@DomainName

/useromainName\AdministratorAccountName

runas 命令允许您运行程序 (*.exe)、保存的 MMC 控制台 (*.msc)、程序和保存的 MMC 控制台的快捷方式及“控制面板”项。作为另一组(例如“Users”或“Power Users”组)的成员登录到计算机时,可以以管理员的身份运行。
可以使用 runas 命令来启动任何程序、MMC 控制器或“控制面板”项。只要提供适当的用户帐户和密码信息,用户帐户就具有登录到计算机的能力,并且程序、MMC 控制台、“控制面板”项在系统中及对该用户帐户均可用.
runas 命令允许您管理其他域的服务器(运行工具的计算机和要管理的服务器在不同的域中)。
如果尝试使用 runas 从网络位置启动程序、MMC 控制台或“控制面板”项,可能会因为用来连接网络共享的凭据与用来启动程序的凭据不同而失败。后者的凭据可能无法访问同一网络共享。
有些项,例如“打印机”文件夹和桌面项,间接由 Windows 2000 打开,而不能使用 runas 命令启动。
如果 runas 命令失败,则可能是没有运行 RunAs 服务或使用的用户帐户无效。要检查 RunAs 服务的状态,请在“计算机管理”中单击“服务和应用程序”,然后单击“服务”。要测试用户帐户,请尝试使用该帐户登录合适的域。
范例
要在本地计算机上以管理员身份启动 Windows 2000 命令提示行实例,请键入:

runas /user:localmachinename\administrator cmd
系统提示时,键入管理员密码。

要使用名为 companydomain\domainadmin 的域管理员帐户启动“计算机管理”管理单元实例,请键入:

runas /user:companydomain\domainadmin "mmc %windir%\system32\compmgmt.msc"
当提示时,键入帐户密码。

要使用名为 domain.microsoft.com 的域中的域管理员帐户 user 启动“记事本”实例,请键入:

runas /user:user@domain.microsoft.com "notepad my_file.txt"
当提示时,键入帐户密码。

要启动命令提示符行窗口、保存的 MMC 控制台、控制面板项或管理其他地点服务器的程序的一个实例,请键入:

runas /netonly /user:domain\username "command"
domain\username 必须是有足够权限管理服务器的用户。当提示时,键入帐户密码。

在win2k中,开始→程序→附件 ,找到计算器,按住shift键,点右键,选择“运行方式 ...”,这时候,会弹出对话框,询问你要使用哪个用户身份来运行该程序。
不知道大家是否使用过win2k的这个功能,如果大家是使用win2k的英文版本的话,在按住shift后选择的就不是“运行方式 ...”而是“runas...”,也就是今天要讲的这个命令。
在cmd中输入runas,会得到帮助,今天,我们只将它最简单的用法,就是怎么样使用这个命令来以另外一个用户身份运行一个程序。

其实,命令非常简单:
runas /user:user_name program.exe
user_name是要使用哪个用户运行该程序就写上哪个用户名,program.exe是程序名,如果program.exe不在system32目录下的话,需要指明具体路径。
为了证明这个过程,做一个实验,那就是使用guest帐号来运行at命令,查看当前的计划任务清单,大家都知道,guest默认情况下是没有此权限的,因此,只要这个命令真的起作用的话,会出现“拒绝访问”的字样,在这里,我们使用这个命令:
runas /user:guest "cmd.exe cmd/k at.exe"
cmd.exe 是调用cmd这个程序,而cmd/k则是指cmd命令后跟/k参数,目的是为了是当前的执行结果的屏幕保留。

(注意:这里由于命令过长,而且中间有空格,所以用引号引起来,如果只有一个命令,例如at.exe的话,那么就不需要有引号了)
由于运行的程序是在一个新窗口中打开,而不是在原来的cmd窗口中打开,所以,如果我不使用cmd.exe cmd/k这个参数的话,窗口会一闪而过,看不到效果。

运行完这个命令后,会要求guest的密码,填上,回车,等一会,一会就会出现一个cmd窗口,里面写着“拒绝访问”,而且,在cmd窗口上沿还有“(运行为guest)”的字样。
这个工具还可以在域中使用,而且还可以加上个人配置文件,实在是很爽~~~
-------
RUNAS 用法:

RUNAS [/profile] [/env] [/netonly] /user: program

/profile 如果需要加载用户的配置文件
/env 要使用当前环境,而不是用户的环境。
/netonly 只在指定的凭据限于远程访问的情况下才使用
/user 应使用 USER@DOMAIN 或 DOMAIN\USER 形式
program EXE. 的命令行。参阅下面的例子

例如:
> runas /profile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad "my file.txt""本回答被提问者采纳

VB怎样指定工作路径?

Private Sub Command1_Click()
Dim i
i = Shell("E:\Diablo II 1.10\Diablo II.exe -direct -ns -res800 -notitle", 1)
End Sub

生成一个Run.exe

把Run.exe放到E:\Diablo II 1.10文件夹下,运行就没问题,如果把Run.exe放到其他文件夹,-direct -ns -res800 -notitle就无效。
要怎样指定工作路径,把Run.exe放到其他文件夹,-direct -ns -res800 -notitle也能正常生效?

参考技术A Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub Command1_Click()
On Error GoTo er
Dim a&
a = ShellExecute(0, "open","E:\Diablo II 1.10\Diablo II.exe -direct -ns -res800 -notitle", 0, 0, 1)
Exit Sub
er:
MsgBox Err.Description, vbCritical, "Err:" & Err.Number
End Sub
'用API试试吧
参考技术B Private Sub Command1_Click()
Dim ii = Shell(App.path & IIf(Right(App.path,1)="\","","\") & "Diablo II.exe -direct -ns -res800 -notitle", 1)
End Sub 用 App.path 替代路径中的绝对路径部分,App.path 返回的是当前应用程序路径。
参考技术C i = Shell(app.path & iif(right(app.path,1)="\","","\") & "Diablo II.exe -direct -ns -res800 -notitle", 1)

以上是关于VB怎么做到指定用户名来运行程序的主要内容,如果未能解决你的问题,请参考以下文章

VB中用SetParent函数让应用程序在指定窗体中运行

vb 遍历窗口下所有控件里的文字(高分)

vb中怎么用timer控件设置一个等待时间

如何从Vb程序运行exe文件

怎样用VB6 打开和关闭一个程序

VB运行VBS程序