| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # 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"
|