msold5 发表于 2023-9-4 17:43:05

本帖最后由 msold5 于 2023-9-4 18:14 编辑

白嫖之黑 发表于 2023-9-4 11:20
因为我这里只能猜,&&pause后au3调用的cmd窗口不会消失,程序运行不正确会有报错信息,麻烦截个图来看 ...
按你的原句,有黑框一闪而过,未pause,怀疑是INF后面多了空格,去掉空格后却不出现黑框了,什么都不出现
于是我写了个cmd.exe来替代原有的命令解释器,把c:\windows\system32\cmd.exe改名,并把这个cmd.exe放进去以便测试参数到底是什么样的。核心代码:
For $i=1 to $CmdLine
      $j=$j & "|||" & $CmdLine[$i]
Next
MsgBox($MB_OK,$CmdLine, $j)
运行:$i=RunWait(@ComSpec & ' /c   "C:\Program Files\PrimoCache\fcsetup.exe" -i "C:\Program Files\PrimoCache\drv\rxfcv.inf " 257')

可以看到这样的结果是:

去掉inf后面的空格运行也只是在上图基础上inf和竖线之间少了个空格
看上去有点像是双引号没有被正确传递?于是我加上引号:$i=RunWait(@ComSpec & " /c " & chr(34) & "C:\Program Files\PrimoCache\fcsetup.exe" & chr(34) & " -i " & chr(34) & "C:\Program Files\PrimoCache\drv\rxfcv.inf" & chr(34) &" 257")
后面少了两个单词,参数由7个变成了5个:


引号仍然没有传递过来?没搞懂是怎么回事,我感觉会是一个很简单的东西我没弄清楚,却不知道是什么东西。
======================================没办法的分隔线======================================

我测试了这个软件安装后的文件,写了几个小批处理
1、安装后测试文件是否成功生成.bat 用于安装,并测试已经成功生成C:\windows\system32\drivers\rxfcv.sys的安装
2、测试文件是否成功生成.bat            测试C:\windows\system32\drivers\rxfcv.sys是否存在
3、删除被测文件以便重测.bat            删除C:\windows\system32\drivers\rxfcv.sys以便重测
请大师们多指点,我已经重装系统,没有安装安全软件也是这样,我写的未成功的AU3和整套软件在这里:
https://www.123pan.com/s/p00rVv-4R6tH.html


gyp2000 发表于 2023-9-4 21:59:23

你这应该不是RUN的问题,你是打算只使用补丁安装这个软件。
如果系统未安装原版,直接执行软件的驱动安装,有可能无法正常替换驱动。
脱离原版安装估计需要将原版的安装包解包后拿到安装程序的处理流程,
才能实现免安装原版直接安装破解版。

haijie1223 发表于 2023-9-5 07:40:58

msold5 发表于 2023-9-4 10:09
先前已设为64位,使用32位不知道为什么只能读一部分注册表,但卸载注册表分支无法读取,所以一直没有弄成 ...

注册表重定向,要么加Wow6432Node,要么使用KEY_WOW64_64KEY,也就是HKLM 64

msold5 发表于 2023-9-5 08:32:17

gyp2000 发表于 2023-9-4 21:59
你这应该不是RUN的问题,你是打算只使用补丁安装这个软件。
如果系统未安装原版,直接执行软件的驱动安装 ...

不脱离,直接用原版安装,然后用补丁进行破解。大约经历卸载驱动、安装驱动这两个步骤,现在是在安装驱动这个步骤被卡住,无法正常执行

tubaba 发表于 2023-9-5 09:08:19

我的经验
如果参数含有空格,请用双引号隔开,如果参数内含有双引号,并使用双引号引用整个参数时,则参数中的双引号需写成两个作为转义,若双引号是首字符,请在双引号前加入一个空格,举例:" ""参数"""

msold5 发表于 2023-9-5 10:24:36

本帖最后由 msold5 于 2023-9-5 10:56 编辑

tubaba 发表于 2023-9-5 09:08
我的经验
如果参数含有空格,请用双引号隔开,如果参数内含有双引号,并使用双引号引用整个参数时,则参数中的 ...
能不能以批处理中的这段来示范一下:
"C:\Program Files\PrimoCache\fcsetup.exe" -i "C:\Program Files\PrimoCache\drv\rxfcv.inf" 257
不应该是这样吗?
$i=RunWait(@ComSpec & ' /c "C:\Program Files\PrimoCache\fcsetup.exe" -i "C:\Program Files\PrimoCache\drv\rxfcv.inf" 257')

msold5 发表于 2023-9-5 11:00:38

本帖最后由 msold5 于 2023-9-5 11:07 编辑

haijie1223 发表于 2023-9-5 07:40
注册表重定向,要么加Wow6432Node,要么使用KEY_WOW64_64KEY,也就是HKLM 64
我已经试了程序在64位读注册表虽然会成功,但也可能会出些其他错,我如果想要改成32位读取uninstall分支(HKLM\SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{7A37EA43-BF6F-4DB7-83DB-97AA19BF9408}_is1里的InstallLocation)
在32位的程序中应该怎么写呢?
已测试加读不出来的:
1、$prog_path = RegRead("HKLM\SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{7A37EA43-BF6F-4DB7-83DB-97AA19BF9408}_is1", "InstallLocation")
2、$prog_path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{7A37EA43-BF6F-4DB7-83DB-97AA19BF9408}_is1", "InstallLocation");
3、$prog_path = RegRead("KEY_WOW64_64KEY\SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{7A37EA43-BF6F-4DB7-83DB-97AA19BF9408}_is1", "InstallLocation");

不信的话,你自己在AU3里#AutoIt3Wrapper_UseX64=N,然后读一下HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\下任意一个值?
而且我在自己的电脑上查看,加不加WoW6432Node是有区别的,这两个地方并不是映射的关系,根本就不一样,{7A37EA43-BF6F-4DB7-83DB-97AA19BF9408}_is1就在不加WoW6432Node下面






afan 发表于 2023-9-5 11:16:11

LZ是64位测试,无需考虑重定向和注册表读取问题,简单的路径引号也没问题。
为何不首先如上贴那样先看看流信息?
Local $iPID = Run('"C:\Program Files\PrimoCache\fcsetup.exe" -i "C:\Program Files\PrimoCache\drv\rxfcv.inf" 257', '', 0, 0x8)
ProcessWaitClose($iPID)
Local $sOutput = StdoutRead($iPID) & @CRLF & StderrRead($iPID)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sOutput = ' & $sOutput & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
MsgBox(0, '', $sOutput)

msold5 发表于 2023-9-5 11:44:02

本帖最后由 msold5 于 2023-9-5 11:45 编辑

afan 发表于 2023-9-5 11:16
LZ是64位测试,无需考虑重定向和注册表读取问题,简单的路径引号也没问题。
为何不首先如上贴那样先看看流 ...


fcsetup.exe和rxfcv都是在的,但结论也是空的,我完全搞不懂了

afan 发表于 2023-9-5 12:01:25

本帖最后由 afan 于 2023-9-5 12:02 编辑

msold5 发表于 2023-9-5 11:44
fcsetup.exe和rxfcv都是在的,但结论也是空的,我完全搞不懂了
换循环读
Local $iPID = Run('"C:\Program Files\PrimoCache\fcsetup.exe" -i "C:\Program Files\PrimoCache\drv\rxfcv.inf" 257', '', 0, 0x2 + 0x4)
Local $sOutput = ""
While 1
      $sOutput &= StdoutRead($iPID)
      If @error Then ExitLoop
WEnd
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sOutput = ' & $sOutput & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
MsgBox(0, "读 Stdout (标准输出):", $sOutput)
$sOutput = ''
While 1
      $sOutput &= StderrRead($iPID)
      If @error Then ExitLoop
WEnd
MsgBox(0, "读 Stdout (标准输出):", $sOutput)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sOutput = ' & $sOutput & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

msold5 发表于 2023-9-5 12:39:27

本帖最后由 msold5 于 2023-9-5 12:45 编辑

afan 发表于 2023-9-5 12:01
换循环读



也相同,弹出两次BOX都一样的显示为空。我把软件放到了这里:https://www.123pan.com/s/p00rVv-4R6tH.html
不需要安装、不需要前置语句,只是运行这一句就可以验证
"C:\Program Files\PrimoCache\fcsetup.exe" -i "C:\Program Files\PrimoCache\drv\rxfcv.inf" 257
如果成功,就会在windows\system32\drivers里生成一个rxfcv.sys
与在Drv子目录里独立右键运行rxfcv.inf一样。
而现在的问题是,在批处理里就可以,在AU3里就不行,而且我把C:\Program Files\PrimoCache\drv里这个DRV文件夹删除掉,运行起来也和上图一模一样没区别





afan 发表于 2023-9-5 14:08:20

换 ShellExecuteWait 试试
ShellExecuteWait('C:\Program Files\PrimoCache\fcsetup.exe', '-i "C:\Program Files\PrimoCache\drv\rxfcv.inf" 257')

msold5 发表于 2023-9-5 14:13:21

本帖最后由 msold5 于 2023-9-5 16:35 编辑

afan 发表于 2023-9-5 14:08
换 ShellExecuteWait 试试
这个可以! 但为什么?相似的两个句子,RunWait就不行,ShellExecuteWait就可以?


haijie1223 发表于 2023-9-5 19:54:11

msold5 发表于 2023-9-5 11:00
我已经试了程序在64位读注册表虽然会成功,但也可能会出些其他错,我如果想要改成32位读取uninstall分支 ...

这种情况,你要去掉Wow6432Node,使用HKLM64

msold5 发表于 2023-9-6 08:25:44

haijie1223 发表于 2023-9-5 19:54
这种情况,你要去掉Wow6432Node,使用HKLM64

明白了,前缀必须修改来适应位数,即由
;$prog_path = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{010792BA-551A-3AC0-A7EF-0FAB4156C382}", "InstallSource")
改为:
$prog_path = RegRead("HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{010792BA-551A-3AC0-A7EF-0FAB4156C382}", "InstallSource")
如果是USER下的则改为:
$prog_path = RegRead("HKCR64\Software\Microsoft\Windows\CurrentVersion\Uninstall\{010792BA-551A-3AC0-A7EF-0FAB4156C382}", "InstallSource")
页: 1 [2] 3
查看完整版本: [已解决]PrimoCache4.3安装过程RUN运行程序出错?