DOS命令处理 - 已解决
本帖最后由 rally 于 2021-5-7 16:02 编辑RunWait(@ComSpec & ' /c' & 'winsat disk -drive c') 不明白为什么运行不了,提示winsat不是可执行命令 ,winsat disk这个命令为什么识别不了,只识别winsat 。 在CMD中执行winsat disk -drive c 是没问题的。这个命令该如何改写呢?
' /c'==> ' /c ' 你的空格掉了 RunWait(@ComSpec & ' /c ' & 'winsat disk -drive c') 加了空格也不行 本帖最后由 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");
本帖最后由 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')) 测试下结果,如果失败则是重定向的问题,关闭重定向
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
看来是大大说的重定向的问题。重定向该如何关闭啊? 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')) afan 发表于 2021-5-7 15:56
试试
解决了,谢谢大大指点~^^^^^ 高山仰止啊,没什么问题能难住大大 afan 发表于 2021-5-7 15:56
试试
刚好遇到了重定向问题,感谢A大的代码:face (33):
页:
[1]