找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29099|回复: 8

[其他] [已解决]win7以上如何以特定方式调用宿主

[复制链接]
发表于 2015-5-5 23:20:19 | 显示全部楼层 |阅读模式
本帖最后由 CrLf 于 2015-5-6 22:40 编辑

1、
32 位程序如何用原生的 64 位宿主运行的 vbs、bat ?
直接运行的话,C:\Windows\System32\cmd.exe 会自动重定向到 C:\Windows\SysWOW64\cmd.exe 路径下的 32 位版本

2、
如何通过命令行“以管理员身份运行”某个程序,而非通过设置属性或右键运行实现?
在管理员账户下双击运行的程序竟然不具备“管理员身份”,我也是醉了...

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-5-5 23:30:50 | 显示全部楼层
本帖最后由 bailong360 于 2015-5-5 23:43 编辑

第一个没用过64位系统(囧)...
第二个可以这样...就是代码略长了点

  1. mshta vbscript:"<script language=vbs>Set UAC=CreateObject(""Shell.Application""):UAC.ShellExecute ""%__APPDIR__%cmd.exe"", ""参数"", """", ""runas"", 1:window,close</script>"
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 感谢指点!

查看全部评分

 楼主| 发表于 2015-5-6 00:04:40 | 显示全部楼层
本帖最后由 CrLf 于 2015-5-6 00:33 编辑

回复 2# bailong360


    果然可行!学习了
    这个 %__APPDIR__% 藏得好深,几乎搜索不到相关资料
    研究了一下 UAC.ShellExecute,大致弄懂了...那个 A 不是必要的,目前知道的 vOperation 除了 runas 还有 open、print、edit
发表于 2015-5-6 18:02:01 | 显示全部楼层
回复 3# CrLf

google资料的时候偶然发现的 http://ss64.com/nt/syntax-variables.html

嗯,A只是传过去的参数,复制的时候忘记删掉了

google了一下第一个问题,果然有老外也遇到过
他们给出的解答是指定目录%windir%\Sysnative
比如运行64位findstr就用%windir%\Sysnative\findstr.exe
我的电脑是32位的,不好测试,兄台试一试看能否成功
 楼主| 发表于 2015-5-6 18:44:54 | 显示全部楼层
回复 4# bailong360


    试过指定具体路径的办法,但 32 位程序只要一涉及 C:\Windows\System32,就会被重定向到 C:\Windows\SysWOW64...我都蛋疼死了
发表于 2015-5-6 22:24:39 | 显示全部楼层
回复 5# CrLf

MSDN上说32位程序访问%windir%\system32会被重定向到SysWOW64
但是访问%windir%\Sysnative可以直接访问system32,兄台不妨试试

In most cases, whenever a 32-bit application attempts to access %windir%\System32, the access is redirected to %windir%\SysWOW64.
32-bit applications can access the native system directory by substituting %windir%\Sysnative for %windir%\System32.

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 感谢指点

查看全部评分

 楼主| 发表于 2015-5-6 22:33:45 | 显示全部楼层
回复 6# bailong360


    原来如此,问题完美解决。
    之前尝试 dir "%windir%\Sysnative" 未果,以为不是通用的解决方案,结果在 32 位 cmd 里比较了下下面两条,观察发现确实有作用:
  1. mshta.exe vbscript:msgbox("test"):close
  2. %windir%\Sysnative\mshta.exe vbscript:msgbox("test"):close
复制代码
两个问题至此完美解决,感谢兄台指点迷津
发表于 2015-5-6 22:47:34 | 显示全部楼层
回复 7# CrLf
能帮到兄台也实属荣幸
发表于 2016-2-22 08:12:36 | 显示全部楼层
本帖最后由 wskwfkbdn 于 2016-2-22 08:20 编辑

回复 5# CrLf


    关闭文件重定向即可,如果不运行64位cmd就没法写64位的部分注册表项。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:46 , Processed in 0.011667 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表