# install.ps1 - CommModifyKit 驱动 + CommModifyKit.dll 安装脚本 # 必须以管理员权限运行 # 用法:以管理员身份打开 PowerShell,执行 .\install.ps1 #Requires -Version 5.1 #Requires -RunAsAdministrator $ErrorActionPreference = 'Stop' $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $SolutionRoot = Split-Path -Parent $ScriptDir Write-Host '=== CommModifyKit 安装脚本 ===' -ForegroundColor Cyan Write-Host "脚本目录: $ScriptDir" Write-Host "项目根目录: $SolutionRoot" Write-Host "" # ============================================================================ # 1. 查找构建产物 # ============================================================================ $DriverSysCandidates = @( Join-Path $SolutionRoot "build\Release\x64\CommModifyKit.sys" Join-Path $SolutionRoot "build\Debug\x64\CommModifyKit.sys" Join-Path $ScriptDir "CommModifyKit.sys" ) $DriverInfCandidates = @( Join-Path $SolutionRoot "build\Release\x64\CommModifyKit.inf" Join-Path $SolutionRoot "build\Debug\x64\CommModifyKit.inf" Join-Path $ScriptDir "..\driver\CommModifyKit.inf" Join-Path $ScriptDir "CommModifyKit.inf" ) $DllCandidates = @( Join-Path $SolutionRoot "build\Release\Win32\CommModifyKit.dll" Join-Path $SolutionRoot "build\Debug\Win32\CommModifyKit.dll" Join-Path $SolutionRoot "build\Release\x64\CommModifyKit.dll" Join-Path $SolutionRoot "build\Debug\x64\CommModifyKit.dll" ) $DriverSys = $DriverSysCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1 $DriverInf = $DriverInfCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1 $DllPath = $DllCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1 if (-not $DriverSys) { Write-Error "未找到 CommModifyKit.sys,请先用 WDK + VS2019 编译 driver 项目" exit 1 } if (-not $DriverInf) { Write-Error "未找到 CommModifyKit.inf" exit 1 } Write-Host "驱动 .sys: $DriverSys" -ForegroundColor Green Write-Host "驱动 .inf: $DriverInf" -ForegroundColor Green if ($DllPath) { Write-Host "用户态 DLL: $DllPath" -ForegroundColor Green } else { Write-Warning "未找到 CommModifyKit.dll(可后续单独编译 dll 项目)" } Write-Host "" # ============================================================================ # 2. 拷贝驱动文件到 System32\drivers # ============================================================================ $TargetDriverDir = Join-Path $env:windir "System32\drivers" $TargetDriverSys = Join-Path $TargetDriverDir "CommModifyKit.sys" $TargetDriverInf = Join-Path $TargetDriverDir "CommModifyKit.inf" Write-Host "拷贝驱动文件到 $TargetDriverDir ..." Copy-Item -Force $DriverSys $TargetDriverSys Copy-Item -Force $DriverInf $TargetDriverInf Write-Host " 完成" -ForegroundColor Green # ============================================================================ # 3. 创建并启动驱动服务 # ============================================================================ $ServiceName = 'CommModifyKit' $ExistingService = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue if ($ExistingService) { Write-Host "服务 $ServiceName 已存在,状态: $($ExistingService.Status)" if ($ExistingService.Status -ne 'Running') { Write-Host "启动服务..." Start-Service -Name $ServiceName Write-Host " 完成" -ForegroundColor Green } } else { Write-Host "创建服务 $ServiceName ..." sc.exe create $ServiceName binPath= $TargetDriverSys type= kernel start= demand error= normal | Out-Null Write-Host " 完成" -ForegroundColor Green Write-Host "启动服务..." sc.exe start $ServiceName | Out-Null Write-Host " 完成" -ForegroundColor Green } # ============================================================================ # 4. 拷贝 DLL 到 CommModifyService 输出目录(如果检测到) # ============================================================================ if ($DllPath) { $ServiceExeCandidates = @( Join-Path $SolutionRoot "..\CommModifyService\x64\Release\CommModifyService.exe" Join-Path $SolutionRoot "..\CommModifyService\Win32\Release\CommModifyService.exe" Join-Path $SolutionRoot "..\CommModifyService\x64\Debug\CommModifyService.exe" Join-Path $SolutionRoot "..\CommModifyService\Win32\Debug\CommModifyService.exe" ) $ServiceExe = $ServiceExeCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1 if ($ServiceExe) { $ServiceDir = Split-Path -Parent $ServiceExe $TargetDll = Join-Path $ServiceDir "CommModifyKit.dll" Write-Host "拷贝 DLL 到 $TargetDll ..." Copy-Item -Force $DllPath $TargetDll Write-Host " 完成" -ForegroundColor Green } else { Write-Warning "未检测到 CommModifyService.exe,请手动拷贝 CommModifyKit.dll 到其目录" } } # ============================================================================ # 5. 启用测试签名(开发期需要) # ============================================================================ $TestSigningEnabled = (bcdedit /enum | Select-String 'testsigning' -Quiet) if (-not $TestSigningEnabled) { Write-Host "" Write-Warning "检测到测试签名未启用,驱动可能无法加载" Write-Host "执行: bcdedit /set testsigning on" -ForegroundColor Yellow bcdedit /set testsigning on | Out-Null Write-Warning "测试签名已启用,需要重启计算机才能生效" } else { Write-Host "测试签名已启用" -ForegroundColor Green } Write-Host "" Write-Host '=== 安装完成 ===' -ForegroundColor Cyan Write-Host "请确认:" Write-Host " 1. 计算机已重启(启用测试签名后)" Write-Host " 2. CommModifyKit.dll 已拷贝到 CommModifyService.exe 所在目录" Write-Host " 3. config.json 中 'comm.use_dll' 设为 true"