msold5 发表于 2025-7-10 11:05:42

PrimoCache4.3自动安装程序升级到4.41修改失败?

本帖最后由 msold5 于 2025-7-10 11:32 编辑

由于话题久远无法回复,只好新开一贴,原贴:PrimoCache4.3安装过程RUN运行程序出错?
在原贴中,@gyp2000 写出的程序比我原计划的好很多,于是就直接使用了
现在官方程序升级到PrimoCache4.41版,我修改原贴的内容后,重启蓝屏,是我哪里没有改对吗?
原贴锚点:https://www.autoitx.com/forum.ph ... id=73417&pid=768180
我修改后的程序:
#AutoIt3Wrapper_UseX64=y
#NoTrayIcon
#include <File.au3>
#include <WinAPIError.au3>

#Region
      #AutoIt3Wrapper_Icon="D:\待测试软件\PrimoCache\PrimoCache4.41v2-20250417\Resources\PrimoCache.ico;图标,支持EXE,DLL,ICO
#EndRegion




Global $Log = @ScriptDir & "\日志.log"
Global $path = @ProgramFilesDir & "\PrimoCache"
If @OSBuild < 6001 Then Exit MsgBox(0, "错误", "不支持的操作系统.")
_install($path)
_TestCertificate($path & "\TestCertificate.cer")
_drivers($path)
_RegCache($path)
_FileWriteLog($Log, "安装完毕")



Func _install($Dir)
      If Not FileExists($Dir) Then DirCreate($Dir)
      If Not FileExists($Dir & "\drv") Then DirCreate($Dir & "\drv")
      If Not FileExists($Dir & "\lang") Then DirCreate($Dir & "\lang")
      FileInstall(".\Resources\FancyCcV.exe", $Dir & "\FancyCcV.exe", 1)
      FileInstall(".\Resources\fcsetup.exe", $Dir & "\fcsetup.exe", 1)
      FileInstall(".\Resources\rxpcc.exe", $Dir & "\rxpcc.exe", 1)
      FileInstall(".\Resources\TestCertificate.cer", $Dir & "\TestCertificate.cer", 1)
      FileInstall(".\Resources\unins000.exe", $Dir & "\unins000.exe", 1)
      FileInstall(".\Resources\unins000.dat", $Dir & "\unins000.dat", 1)
      FileInstall(".\Resources\pcc_chs.dll", $Dir & "\lang\pcc_chs.dll", 1)
      MsgBox($MB_OK,@SystemDir & "\drivers\rxfcv.sys", $Dir)
                Select
                Case @OSBuild >= 6001 And @OSBuild < 10240
                        FileInstall(".\Resources\rxfcv,7.cat", $Dir & "\drv\rxfcv.cat", 1)
                        FileInstall(".\Resources\rxfcv,7.inf", $Dir & "\drv\rxfcv.inf", 1)
                        FileInstall(".\Resources\rxfcv,7.sys", $Dir & "\drv\rxfcv.sys", 1)
                        FileInstall(".\Resources\rxfcv,7.sys.bak", @SystemDir & "\drivers\rxfcv.sys", 1)
                Case @OSBuild >= 17763
                        FileInstall(".\Resources\rxfcv,10.cat", $Dir & "\drv\rxfcv.cat", 1)
                        FileInstall(".\Resources\rxfcv,10.inf", $Dir & "\drv\rxfcv.inf", 1)
                        FileInstall(".\Resources\rxfcv,10.sys", $Dir & "\drv\rxfcv.sys", 1)
                        FileInstall(".\Resources\rxfcv,10.sys.bak", @SystemDir & "\drivers\rxfcv.sys", 1)
                Case Else
                ;Case @OSBuild >= 10240 And @OSBuild < 17763
                        FileInstall(".\Resources\rxfcv,10L.cat", $Dir & "\drv\rxfcv.cat", 1)
                        FileInstall(".\Resources\rxfcv,10L.inf", $Dir & "\drv\rxfcv.inf", 1)
                        FileInstall(".\Resources\rxfcv,10L.sys", $Dir & "\drv\rxfcv.sys", 1)
                        FileInstall(".\Resources\rxfcv,10L.sys.bak", @SystemDir & "\drivers\rxfcv.sys", 1)
                EndSelect
      If Not FileExists(@StartMenuCommonDir & "\PrimoCache") Then DirCreate(@StartMenuCommonDir & "\PrimoCache")
      FileCreateShortcut($Dir & "\FancyCcV.exe", @StartMenuCommonDir & "\PrimoCache\PrimoCache.lnk", $Dir)
      FileCreateShortcut($Dir & "\unins000.exe", @StartMenuCommonDir & "\PrimoCache\卸载PrimoCache.lnk", $Dir)

EndFunc   ;==>_install

Func _drivers($Dir)
      $Pid = Run('"' & $Dir & "\fcsetup.exe" & '"' & ' -i ' & '"' & $Dir & "\drv\rxfcv.inf" & '"' & ' 257', $Dir, @SW_HIDE)
      ProcessWaitClose($Pid)
      $Handle = _ProcessExitCode($Pid)
      $ExitCode = _ProcessExitCode($Pid, $Handle)
      If $ExitCode <> 0 Then
                _FileWriteLog($Log, "驱动安装完成。 退出代码:" & $ExitCode & ":" & _WinAPI_GetErrorMessage($ExitCode))
      Else
                _FileWriteLog($Log, "驱动安装完成")
      EndIf
EndFunc   ;==>_drivers

Func _TestCertificate($File)
      If Not FileExists($File) Then Return False
      RegRead("HKLM64\SOFTWARE\Microsoft\SystemCertificates\ROOT\Certificates\D39680ED59502209941759C74229F7E2FAC72749", "Blob")
      If @error Then
                If FileExists(@SystemDir & "\certutil.exe") and FileExists($File) Then
                        RunWait(@SystemDir & "\certutil.exe" & " -f -addstore Root " & '"' & $File & '"', @ScriptDir, @SW_HIDE)
                        RunWait(@SystemDir & "\certutil.exe" & " -f -addstore TrustedPublisher " & '"' & $File & '"', @ScriptDir, @SW_HIDE)
                        _FileWriteLog($Log, "添加驱动证书")
                        FileDelete($File)
                Else
                        FileDelete($File)
                        Return False
                EndIf
      Else
                _FileWriteLog($Log, "驱动证书已存在")
                FileDelete($File)
      EndIf
      Return True
EndFunc   ;==>_TestCertificate

Func _RegCache($Dir)
      Local $iRegWrite, $Data, $Uninstall
      $Uninstall = "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{7A37EA43-BF6F-4DB7-83DB-97AA19BF9408}_is1"
      RegWrite("HKLM64\SOFTWARE\Romex Software\FancyCcV", "Version", "REG_DWORD", 67305472)
      RegWrite("HKLM64\SOFTWARE\Romex Software\FancyCcV", "Multilingual", "REG_SZ", "mui")
      RegWrite("HKLM64\SOFTWARE\Romex Software\FancyCcV", "PrefetchPath", "REG_SZ", "\DosDevices" & $Dir & "\prefetch")
      RegWrite("HKCU64\SOFTWARE\Romex Software\PrimoCache", "LanguageId", "REG_DWORD", 2052)

      RegWrite($Uninstall, "DisplayName", "REG_SZ", "PrimoCache 4.4.1")
      RegWrite($Uninstall, "DisplayVersion", "REG_SZ", "4.4.1")
      RegWrite($Uninstall, "UninstallString", "REG_SZ", $Dir & "\unins000.exe")
      RegWrite($Uninstall, "DisplayIcon", "REG_SZ", $Dir & "\FancyCcV.exe")
      RegWrite($Uninstall, "InstallLocation", "REG_SZ", $Dir & "")
      RegWrite($Uninstall, "Publisher", "REG_SZ", "Romex Software")
      RegWrite($Uninstall, "URLInfoAbout", "REG_SZ", "http://www.romexsoftware.com/")
      RegWrite($Uninstall, "NoModify", "REG_DWORD", 1)
      RegWrite($Uninstall, "NoRepair", "REG_DWORD", 1)
      RegWrite($Uninstall, "InstallDate", "REG_SZ", @YEAR & @MON & @MDAY)
      RegWrite($Uninstall, "EstimatedSize", "REG_DWORD", DirGetSize($Dir) / 1000)

      RegWrite("HKLM64\SYSTEM\CurrentControlSet\Services\FancyCcV\Parameters", "Scode", "REG_BINARY", Binary("0x5461dce9066ead46b4fb4d1b2cc61c6f"))
      $Data = "0xB800000055EAC6F98FECF94466FF7C07" & _
                        "07075BB7A8F7700FE09E0AA48C81C369" & _
                        "580C83A26E217A8EF08E1A94BCB1F399" & _
                        "281C73B25E114A7E2B7B28616E23E0B0" & _
                        "C231D0F8D16FD3C6B8DDEC122FF6057D" & _
                        "9E95E754A3F8CA261AEC6E7841899990" & _
                        "D1BEA09F2CB41E72672C98FD5690E585" & _
                        "2619AECBF177C5C88A2B8CAECA3EE093" & _
                        "2F1DAEC82B3ADF1E7EDF43AFBF9C7090" & _
                        "0A2D5B9CA45B172E0FF6F77AAA1B704C" & _
                        "D0C48096B7E8674F9BE9416EAEB7547B" & _
                        "1B417F848265302A"
      $iRegWrite = RegWrite("HKLM64\SYSTEM\CurrentControlSet\Services\FancyCcV\Parameters", "Data3", "REG_BINARY", Binary($Data))
      If $iRegWrite = False Then
                _FileWriteLog($Log, "添加激活信息失败")
                Return False
      Else
                _FileWriteLog($Log, "添加激活信息成功")
                Return True
      EndIf
EndFunc   ;==>_RegCache

Func _GetVer()
      Select
                Case @OSBuild >= 6001 And @OSBuild < 10240
                        Return "win7"
                Case @OSBuild >= 10240
                        Return "win10"
                Case Else
                        Return
      EndSelect
EndFunc   ;==>_GetVer

Func _ProcessExitCode($i_Pid, $h_Process = 0)
      Local $v_Placeholder
      If Not IsArray($h_Process) Then
                $h_Process = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'int', 0x400, 'int', 0, 'int', $i_Pid)
                If Not @error Then Return $h_Process
      Else
                $h_Process = DllCall('kernel32.dll', 'ptr', 'GetExitCodeProcess', 'ptr', $h_Process, 'int*', $v_Placeholder)
                If Not @error Then Return $h_Process
      EndIf
      Return 0
EndFunc   ;==>_ProcessExitCode附件是需改造的两个分包压缩的批处理版,已测试批处理版可完全正确安装使用。
页: [1]
查看完整版本: PrimoCache4.3自动安装程序升级到4.41修改失败?