Board logo

标题: [其他] [已解决]win7以上如何以特定方式调用宿主 [打印本页]

作者: CrLf    时间: 2015-5-5 23:20     标题: [已解决]win7以上如何以特定方式调用宿主

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

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

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

本帖最后由 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>"
复制代码

作者: CrLf    时间: 2015-5-6 00:04

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

回复 2# bailong360


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

回复 3# CrLf

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

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

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

回复 4# bailong360


    试过指定具体路径的办法,但 32 位程序只要一涉及 C:\Windows\System32,就会被重定向到 C:\Windows\SysWOW64...我都蛋疼死了
作者: bailong360    时间: 2015-5-6 22:24

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

作者: CrLf    时间: 2015-5-6 22:33

回复 6# bailong360


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

回复 7# CrLf
能帮到兄台也实属荣幸
作者: wskwfkbdn    时间: 2016-2-22 08:12

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

回复 5# CrLf


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2