[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 CrLf 于 2015-5-6 22:40 编辑

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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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

评分人数

    • CrLf: 感谢指点!技术 + 1

TOP

本帖最后由 CrLf 于 2015-5-6 00:33 编辑

回复 2# bailong360


    果然可行!学习了
    这个 %__APPDIR__% 藏得好深,几乎搜索不到相关资料
    研究了一下 UAC.ShellExecute,大致弄懂了...那个 A 不是必要的,目前知道的 vOperation 除了 runas 还有 open、print、edit

TOP

回复 3# CrLf

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

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

google了一下第一个问题,果然有老外也遇到过
他们给出的解答是指定目录%windir%\Sysnative
比如运行64位findstr就用%windir%\Sysnative\findstr.exe
我的电脑是32位的,不好测试,兄台试一试看能否成功

TOP

回复 4# bailong360


    试过指定具体路径的办法,但 32 位程序只要一涉及 C:\Windows\System32,就会被重定向到 C:\Windows\SysWOW64...我都蛋疼死了

TOP

回复 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

评分人数

    • CrLf: 感谢指点技术 + 1

TOP

回复 6# bailong360


    原来如此,问题完美解决。
    之前尝试 dir "%windir%\Sysnative" 未果,以为不是通用的解决方案,结果在 32 位 cmd 里比较了下下面两条,观察发现确实有作用:
  1. mshta.exe vbscript:msgbox("test"):close
  2. %windir%\Sysnative\mshta.exe vbscript:msgbox("test"):close
复制代码
两个问题至此完美解决,感谢兄台指点迷津

TOP

回复 7# CrLf
能帮到兄台也实属荣幸

TOP

本帖最后由 wskwfkbdn 于 2016-2-22 08:20 编辑

回复 5# CrLf


    关闭文件重定向即可,如果不运行64位cmd就没法写64位的部分注册表项。

TOP

返回列表