mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-16 04:45:46 +00:00
31d7d42edf
修改脚本为 UTF-8 with BOM 格式,解决添加注释后执行报错的问题
123 lines
4.0 KiB
PowerShell
123 lines
4.0 KiB
PowerShell
# 检查当前会话是否具有管理员权限
|
|
function Test-Administrator {
|
|
$user = [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
|
|
}
|
|
|
|
if (-not (Test-Administrator)) {
|
|
# 如果不是管理员,则重新启动脚本以管理员模式运行
|
|
$scriptPath = $myInvocation.MyCommand.Path
|
|
if (-not $scriptPath) {
|
|
$scriptPath = $PSCommandPath
|
|
}
|
|
$newProcess = New-Object System.Diagnostics.ProcessStartInfo "powershell";
|
|
$newProcess.Arguments = "-File `"$scriptPath`" $args"
|
|
$newProcess.Verb = "runas";
|
|
[System.Diagnostics.Process]::Start($newProcess);
|
|
exit
|
|
}
|
|
|
|
function Get-QQpath {
|
|
try {
|
|
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
|
|
$uninstallString = $key.UninstallString
|
|
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
|
|
}
|
|
catch {
|
|
throw "get QQ path error: $_"
|
|
}
|
|
}
|
|
function Select-QQPath {
|
|
Add-Type -AssemblyName System.Windows.Forms
|
|
[System.Windows.Forms.Application]::EnableVisualStyles()
|
|
|
|
$dialogTitle = "Select QQ.exe"
|
|
|
|
$filePicker = New-Object System.Windows.Forms.OpenFileDialog
|
|
$filePicker.Title = $dialogTitle
|
|
$filePicker.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"
|
|
$filePicker.FilterIndex = 1
|
|
$null = $filePicker.ShowDialog()
|
|
if (-not ($filePicker.FileName)) {
|
|
throw "User did not select an .exe file."
|
|
}
|
|
return $filePicker.FileName
|
|
}
|
|
|
|
# 设置当前工作目录
|
|
$scriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
|
|
Set-Location $scriptDirectory
|
|
|
|
# 获取当前目录路径
|
|
$currentPath = Get-Location
|
|
|
|
# 替换\为/
|
|
$currentPath = $currentPath -replace '\\', '/'
|
|
|
|
# 生成JavaScript代码
|
|
$jsCode = @"
|
|
(async () => {
|
|
await import('file:///$currentPath/napcat.mjs');
|
|
})();
|
|
"@
|
|
|
|
# 将JavaScript代码保存到文件中
|
|
$jsFilePath = Join-Path $currentPath "loadScript.js"
|
|
$jsCode | Out-File -FilePath $jsFilePath -Encoding UTF8
|
|
|
|
Write-Output "JavaScript code has been generated and saved to $jsFilePath"
|
|
# 设置NAPCAT_PATH环境变量为 当前目录的loadScript.js地址
|
|
$env:NAPCAT_PATH = $jsFilePath
|
|
|
|
$params = $args -join " "
|
|
Try {
|
|
$QQpath = Get-QQpath
|
|
}
|
|
Catch {
|
|
$QQpath = Select-QQPath
|
|
}
|
|
# 拿不到QQ路径则退出
|
|
if (!(Test-Path $QQpath)) {
|
|
Write-Output "provided QQ path is invalid: $QQpath"
|
|
Read-Host "Press any key to continue..."
|
|
exit
|
|
}
|
|
|
|
$commandInfo = Get-Command $QQpath -ErrorAction Stop
|
|
|
|
# 收集dbghelp.dll路径和HASH信息
|
|
$QQpath = Split-Path $QQpath
|
|
$oldDllPath = Join-Path $QQpath "dbghelp.dll"
|
|
$oldDllHash = Get-FileHash $oldDllPath -Algorithm MD5
|
|
$newDllPath = Join-Path $currentPath "dbghelp.dll"
|
|
$newDllHash = Get-FileHash $newDllPath -Algorithm MD5
|
|
# 如果文件一致则跳过
|
|
if ($oldDllHash.Hash -ne $newDllHash.Hash) {
|
|
$processes = Get-Process -Name QQ -ErrorAction SilentlyContinue
|
|
if ($processes) {
|
|
# 文件占用则退出
|
|
Write-Output "dbghelp.dll is in use by the following processes:"
|
|
$processes | ForEach-Object { Write-Output "$($_.Id) $($_.Name) $($_.Path)" }
|
|
Write-Output "dbghelp.dll is in use, cannot continue."
|
|
Read-Host "Press any key to continue..."
|
|
exit
|
|
} else {
|
|
# 文件未占用则尝试覆盖
|
|
try {
|
|
Copy-Item -Path "$newDllPath" -Destination "$oldDllPath" -Force
|
|
Write-Output "dbghelp.dll has been copied to $QQpath"
|
|
} catch {
|
|
Write-Output "Failed to copy dbghelp.dll: $_"
|
|
Read-Host "Press any key to continue..."
|
|
exit
|
|
}
|
|
}
|
|
}
|
|
|
|
# 带参数启动QQ
|
|
try {
|
|
Start-Process powershell -ArgumentList '-noexit', '-noprofile', "-command &{& chcp 65001;& '$($commandInfo.Path)' --enable-logging $params}" -NoNewWindow -ErrorAction Stop
|
|
} catch {
|
|
Write-Output "Failed to start process as administrator: $_"
|
|
Read-Host "Press any key to continue..."
|
|
} |