找回密码
 加入
搜索
查看: 2756|回复: 8

[网络通信] DOS命令处理 - 已解决

[复制链接]
发表于 2021-5-7 14:58:26 | 显示全部楼层 |阅读模式
本帖最后由 rally 于 2021-5-7 16:02 编辑

RunWait(@ComSpec & ' /c' & 'winsat disk -drive c')     不明白为什么运行不了,提示winsat不是可执行命令 ,winsat disk  这个命令为什么识别不了,只识别winsat 。 在CMD中执行winsat disk -drive c 是没问题的。这个命令该如何改写呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2021-5-7 15:02:23 | 显示全部楼层
' /c'  ==> ' /c ' 你的空格掉了
 楼主| 发表于 2021-5-7 15:04:34 | 显示全部楼层
RunWait(@ComSpec & ' /c ' & 'winsat disk -drive c')   加了空格也不行
 楼主| 发表于 2021-5-7 15:06:46 | 显示全部楼层
本帖最后由 rally 于 2021-5-7 15:42 编辑

winsat disk ,这个命令如果只先执行winsat就会提示 不是内部或外部名  ,winsat disk ,两个单词的命令该如何处理?还请大大指点一下,搜了好久没弄明白
尝试用_RunDos("winsat disk -drive j -seq -read")也没反应

找到网上的一段解读,不太明白该如何改命令


使用Windows-on Windows 64位重定向。发生了什么事情,你的启动请求(从32位进程)被重定向到%windir%\SysWOW64\winsat.exe 。由于64位安装上没有此特定可执行文件的32位版本,因此启动失败。要绕过此过程并允许32位进程访问本机(64位)路径,可以引用%windir%\sysnative :


处理WinSPro = new Process();
ProcessStartInfo WinSSInfo = new ProcessStartInfo();
WinSSInfo.FileName = @"c:\windows\sysnative\winsat.exe";
WinSPro.StartInfo = WinSSInfo;
WinSPro.Start();
  

或者,如果将程序构建为x64,则可以将路径保留为 c:\windows \system32 。


请注意,最好使用 Environment.GetFolderPath 获取Windows目录的路径,以防操作系统安装在非标准位置:


  WinSSInfo.FileName = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Windows),
@"sysnative\winsat.exe");
  


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2021-5-7 15:35:56 | 显示全部楼层
本帖最后由 afan 于 2021-5-7 15:41 编辑

winsat.exe 指定绝对路径试试,如 RunWait(@ComSpec & ' /c ' & '"c:\xxx\winsat.exe" disk -drive c')
或者 MsgBox(0, '', FileExists('c:\xxx\winsat.exe')) 测试下结果,如果失败则是重定向的问题,关闭重定向
 楼主| 发表于 2021-5-7 15:53:02 | 显示全部楼层
afan 发表于 2021-5-7 15:35
winsat.exe 指定绝对路径试试,如 RunWait(@ComSpec & ' /c ' & '"c:\xxx\winsat.exe" disk -drive c')
或 ...

MsgBox(0, '', FileExists('C:\Windwos\winsxs\amd64_microsoft-windows-w..ystemassessmenttool_31bf3856ad364e35_6.1.7601.17514_none_d9bafd47cdf9833b\winsat.exe'))
  MsgBox(0, '', FileExists('C:/Windows/System32/winsat.exe'))
查找winsat.exe ,找到2个路径
测试的结果都是0
看来是大大说的重定向的问题。重定向该如何关闭啊?
发表于 2021-5-7 15:56:33 | 显示全部楼层
rally 发表于 2021-5-7 15:53
MsgBox(0, '', FileExists('C:\Windwos\winsxs\amd64_microsoft-windows-w..ystemassessmenttool_31bf38 ...

试试
DllCall('kernel32.dll', 'Bool', 'Wow64DisableWow64FsRedirection', 'ptr', '')
MsgBox(0, '', FileExists('C:\Windows\System32\winsat.exe'))
 楼主| 发表于 2021-5-7 16:02:07 | 显示全部楼层

解决了,谢谢大大指点~^^^^^ 高山仰止啊,没什么问题能难住大大
发表于 2021-5-11 21:55:41 | 显示全部楼层

刚好遇到了重定向问题,感谢A大的代码
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 02:15 , Processed in 0.089950 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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