mirror of
https://github.com/SpotX-Official/SpotX.git
synced 2026-04-11 17:37:21 +10:00
version bump to 1.2.78.409
- fixes to the function for disabling file signature verification - display a setting to enable exclusive mode for an output device - enable list Private by default setting in desktop social settings
This commit is contained in:
@@ -579,7 +579,7 @@
|
||||
"native_description": "Enable embedded display ads on NPV",
|
||||
"version": {
|
||||
"fr": "1.2.57",
|
||||
"to": ""
|
||||
"to": "1.2.77"
|
||||
}
|
||||
},
|
||||
"EnhancedAdsClientDeconfliction": {
|
||||
@@ -615,7 +615,7 @@
|
||||
"native_description": "EWhen enabled, enhanced visibility logs will be sent for embedded ads",
|
||||
"version": {
|
||||
"fr": "1.2.63",
|
||||
"to": ""
|
||||
"to": "1.2.77"
|
||||
}
|
||||
},
|
||||
"Hpto": {
|
||||
@@ -660,7 +660,7 @@
|
||||
"native_description": "Enable embedded ads fetching when canvas track is playing. Defaults to true since this is currently existing behavior",
|
||||
"version": {
|
||||
"fr": "1.2.72",
|
||||
"to": ""
|
||||
"to": "1.2.77"
|
||||
}
|
||||
},
|
||||
"SponsoredPlaylistMockEndpoint": {
|
||||
@@ -690,12 +690,47 @@
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"AgeAssuranceSocial": {
|
||||
"name": "enableAgeAssuranceSocial",
|
||||
"description": "Enables the age assurance feature for social aspects (e.g., comments, friend feed)",
|
||||
"native_description": "Enables the age assurance feature for social aspects (e.g., comments, friend feed)",
|
||||
"AgeAssuranceFriendActivity": {
|
||||
"name": "enableAgeAssuranceFriendActivity",
|
||||
"version": {
|
||||
"fr": "1.2.77",
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"AgeAssuranceComments": {
|
||||
"name": "enableAgeAssuranceComments",
|
||||
"version": {
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"AgeAssuranceProfileMenu": {
|
||||
"name": "enableAgeAssuranceProfileMenu",
|
||||
"version": {
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"AgeAssuranceSettings": {
|
||||
"name": "enableAgeAssuranceSettings",
|
||||
"version": {
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"UnderAgeBlockingModal": {
|
||||
"name": "enableUnderAgeBlockingModal",
|
||||
"native_description": "Enables the underage blocking modal for accounts in blocked/pending disabled state",
|
||||
"version": {
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"AdImpressionDoesNotIgnoreVisilibility": {
|
||||
"name": "embeddedAdImpressionDoesNotIgnoreVisilibility",
|
||||
"native_description": "If enabled, we do consider percent visibility when logging the display ad impression",
|
||||
"version": {
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
}
|
||||
@@ -1708,6 +1743,22 @@
|
||||
"fr": "1.2.76",
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"ExclusiveModeSetting": {
|
||||
"name": "enableExclusiveModeSetting",
|
||||
"native_description": "Display a setting to enable exclusive mode for an output device",
|
||||
"version": {
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
},
|
||||
"ListPrivateByDefaultSetting": {
|
||||
"name": "enableListPrivateByDefaultSetting",
|
||||
"native_description": "Enable List Private By Default setting in Desktop Social Settings",
|
||||
"version": {
|
||||
"fr": "1.2.78",
|
||||
"to": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"CustomExp": {
|
||||
|
||||
330
run.ps1
330
run.ps1
@@ -305,6 +305,26 @@ if ($psv -ge 7) {
|
||||
# add Tls12
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12;
|
||||
|
||||
function Stop-Script {
|
||||
param(
|
||||
[string]$Message = ($lang).StopScript
|
||||
)
|
||||
|
||||
Write-Host $Message
|
||||
|
||||
switch ($Host.Name) {
|
||||
"Windows PowerShell ISE Host" {
|
||||
pause
|
||||
break
|
||||
}
|
||||
default {
|
||||
Write-Host ($lang).PressAnyKey
|
||||
[void][System.Console]::ReadKey($true)
|
||||
break
|
||||
}
|
||||
}
|
||||
Exit
|
||||
}
|
||||
function Get-Link {
|
||||
param (
|
||||
[Alias("e")]
|
||||
@@ -382,7 +402,7 @@ if (!($version -and $version -match $match_v)) {
|
||||
}
|
||||
else {
|
||||
# latest tested version for Win 10-12
|
||||
$onlineFull = "1.2.77.358.g4339a634-545"
|
||||
$onlineFull = "1.2.78.409.g6aead1f8-948"
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -557,13 +577,11 @@ function downloadSp() {
|
||||
$Error[0].Exception
|
||||
Write-Host
|
||||
Write-Host ($lang).Download4`n
|
||||
($lang).StopScript
|
||||
$tempDirectory = $PWD
|
||||
Pop-Location
|
||||
Start-Sleep -Milliseconds 200
|
||||
Remove-Item -Recurse -LiteralPath $tempDirectory
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -644,9 +662,7 @@ if ($win10 -or $win11 -or $win8_1 -or $win8 -or $win12) {
|
||||
Get-AppxPackage -Name SpotifyAB.SpotifyMusic | Remove-AppxPackage
|
||||
}
|
||||
if ($ch -eq 'n') {
|
||||
Read-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -871,13 +887,11 @@ if ($spotifyInstalled) {
|
||||
}
|
||||
|
||||
if ($ch -eq 'n') {
|
||||
Write-Host ($lang).StopScript
|
||||
$tempDirectory = $PWD
|
||||
Pop-Location
|
||||
Start-Sleep -Milliseconds 200
|
||||
Remove-Item -Recurse -LiteralPath $tempDirectory
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1006,14 +1020,11 @@ $webjson = Get -Url (Get-Link -e "/patches/patches.json") -RetrySeconds 5
|
||||
if ($webjson -eq $null) {
|
||||
Write-Host
|
||||
Write-Host "Failed to get patches.json" -ForegroundColor Red
|
||||
Write-Host ($lang).StopScript
|
||||
$tempDirectory = $PWD
|
||||
Pop-Location
|
||||
Start-Sleep -Milliseconds 200
|
||||
Remove-Item -Recurse -LiteralPath $tempDirectory
|
||||
Pause
|
||||
Exit
|
||||
|
||||
Stop-Script
|
||||
}
|
||||
|
||||
|
||||
@@ -1680,113 +1691,200 @@ function Extract-WebpackModules {
|
||||
|
||||
function Reset-Dll-Sign {
|
||||
param (
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$FilePath
|
||||
)
|
||||
|
||||
# convert hex string to byte array
|
||||
function ConvertTo-ByteArray {
|
||||
param([string]$HexString)
|
||||
return [byte[]]($HexString -split ' ' | ForEach-Object { [Convert]::ToByte($_, 16) })
|
||||
$TargetStringText = "Check failed: sep_pos != std::wstring::npos."
|
||||
|
||||
$Patch_x64 = "B8 01 00 00 00 C3"
|
||||
|
||||
$Patch_ARM64 = "20 00 80 52 C0 03 5F D6"
|
||||
|
||||
$Patch_x64 = [byte[]]($Patch_x64 -split ' ' | ForEach-Object { [Convert]::ToByte($_, 16) })
|
||||
$Patch_ARM64 = [byte[]]($Patch_ARM64 -split ' ' | ForEach-Object { [Convert]::ToByte($_, 16) })
|
||||
|
||||
$csharpCode = @"
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class ScannerCore {
|
||||
public static int FindBytes(byte[] data, byte[] pattern) {
|
||||
for (int i = 0; i < data.Length - pattern.Length; i++) {
|
||||
bool match = true;
|
||||
for (int j = 0; j < pattern.Length; j++) {
|
||||
if (data[i + j] != pattern[j]) { match = false; break; }
|
||||
}
|
||||
if (match) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
# byte patterns for x64 arch
|
||||
# <= 1.2.77
|
||||
$searchPattern_x64_old = '30 01 00 00 5B C3 CC CC 48 89 5C 24 18 55'
|
||||
public static List<int> FindXref_ARM64(byte[] data, ulong stringRVA, ulong sectionRVA, uint sectionRawPtr, uint sectionSize) {
|
||||
List<int> results = new List<int>();
|
||||
for (uint i = 0; i < sectionSize; i += 4) {
|
||||
uint fileOffset = sectionRawPtr + i;
|
||||
if (fileOffset + 8 > data.Length) break;
|
||||
uint inst1 = BitConverter.ToUInt32(data, (int)fileOffset);
|
||||
|
||||
# >= 1.2.78
|
||||
$searchPattern_x64_new = '4A 01 CC CC CC 48 8B C4 48 89 58'
|
||||
// ADRP
|
||||
if ((inst1 & 0x9F000000) == 0x90000000) {
|
||||
int rd = (int)(inst1 & 0x1F);
|
||||
long immLo = (inst1 >> 29) & 3;
|
||||
long immHi = (inst1 >> 5) & 0x7FFFF;
|
||||
long imm = (immHi << 2) | immLo;
|
||||
if ((imm & 0x100000) != 0) { imm |= unchecked((long)0xFFFFFFFFFFE00000); }
|
||||
imm = imm << 12;
|
||||
ulong pc = sectionRVA + i;
|
||||
ulong pcPage = pc & 0xFFFFFFFFFFFFF000;
|
||||
ulong page = (ulong)((long)pcPage + imm);
|
||||
|
||||
# common replace pattern for x64
|
||||
$replacePattern_x64 = 'B8 01 00 00 00 C3'
|
||||
$bytesToReplaceCount_x64 = 6
|
||||
|
||||
# byte patterns for ARM64 arch
|
||||
$searchPattern_ARM64 = 'E0 03 13 AA FD 7B D3 A8 F3 07 41 F8 C0 03 5F D6 61 00 00 D4 00 00 00 00 FD 7B BA A9 F3 53 01 A9'
|
||||
$replacePattern_ARM64 = '20 00 80 52 C0 03 5F D6'
|
||||
$bytesToReplaceCount_ARM64 = 8
|
||||
|
||||
if (-not (Test-Path $FilePath -PathType Leaf)) {
|
||||
Write-Error "File not found at path: $FilePath"
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
}
|
||||
|
||||
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath)
|
||||
$peHeaderOffset = [System.BitConverter]::ToUInt32($fileBytes, 0x3C)
|
||||
$fileHeaderOffset = $peHeaderOffset + 4
|
||||
$archInfo = Get-PEArchitectureOffsets -bytes $fileBytes -fileHeaderOffset $fileHeaderOffset
|
||||
|
||||
if ($archInfo.Architecture -eq 'ARM64') {
|
||||
$searchPattern = ConvertTo-ByteArray $searchPattern_ARM64
|
||||
$replacePattern = ConvertTo-ByteArray $replacePattern_ARM64
|
||||
$bytesToReplaceCount = $bytesToReplaceCount_ARM64
|
||||
Write-Verbose "Using ARM64 byte patterns"
|
||||
}
|
||||
else {
|
||||
$replacePattern = ConvertTo-ByteArray $replacePattern_x64
|
||||
$bytesToReplaceCount = $bytesToReplaceCount_x64
|
||||
if ([version]$offline -ge [version]'1.2.78.354') {
|
||||
$searchPattern = ConvertTo-ByteArray $searchPattern_x64_new
|
||||
Write-Verbose "Using new x64 byte patterns (>= 1.2.78)"
|
||||
}
|
||||
else {
|
||||
$searchPattern = ConvertTo-ByteArray $searchPattern_x64_old
|
||||
Write-Verbose "Using old x64 byte patterns (<= 1.2.77)"
|
||||
uint inst2 = BitConverter.ToUInt32(data, (int)fileOffset + 4);
|
||||
// ADD
|
||||
if ((inst2 & 0xFF800000) == 0x91000000) {
|
||||
int rn = (int)((inst2 >> 5) & 0x1F);
|
||||
if (rn == rd) {
|
||||
long imm12 = (inst2 >> 10) & 0xFFF;
|
||||
ulong target = page + (ulong)imm12;
|
||||
if (target == stringRVA) { results.Add((int)fileOffset); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
public static int FindStart(byte[] data, int startOffset, bool isArm) {
|
||||
int step = isArm ? 4 : 1;
|
||||
if (isArm && (startOffset % 4 != 0)) { startOffset -= (startOffset % 4); }
|
||||
|
||||
for (int i = startOffset; i > 0; i -= step) {
|
||||
if (isArm) {
|
||||
if (i < 4) break;
|
||||
uint currInst = BitConverter.ToUInt32(data, i);
|
||||
// ARM64 Prologue: STP X29, X30, [SP, -imm]! -> FD 7B .. A9
|
||||
if ((currInst & 0xFF00FFFF) == 0xA9007BFD) { return i; }
|
||||
} else {
|
||||
// x64 Prologue: Padding 0xCC
|
||||
if (data[i] != 0xCC && data[i-1] == 0xCC) return i;
|
||||
}
|
||||
if (startOffset - i > 20000) break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
"@
|
||||
|
||||
if (-not ([System.Management.Automation.PSTypeName]'ScannerCore').Type) {
|
||||
Add-Type -TypeDefinition $csharpCode
|
||||
}
|
||||
|
||||
Write-Verbose "Loading file: $FilePath"
|
||||
if (-not (Test-Path $FilePath)) {
|
||||
Write-Warning "File Spotify.dll not found"
|
||||
Stop-Script
|
||||
}
|
||||
$bytes = [System.IO.File]::ReadAllBytes($FilePath)
|
||||
|
||||
try {
|
||||
Write-Verbose "Reading file..."
|
||||
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath)
|
||||
Write-Verbose "File read. Size: $($fileBytes.Length) bytes."
|
||||
$e_lfanew = [BitConverter]::ToInt32($bytes, 0x3C)
|
||||
$Machine = [BitConverter]::ToUInt16($bytes, $e_lfanew + 4)
|
||||
$IsArm64 = $false
|
||||
$ArchName = "Unknown"
|
||||
|
||||
$offset = -1
|
||||
$searchLimit = $fileBytes.Length - $searchPattern.Length
|
||||
|
||||
Write-Verbose "Searching for byte sequence..."
|
||||
for ($i = 0; $i -le $searchLimit; $i++) {
|
||||
$match = $true
|
||||
for ($j = 0; $j -lt $searchPattern.Length; $j++) {
|
||||
if ($fileBytes[$i + $j] -ne $searchPattern[$j]) {
|
||||
$match = $false
|
||||
break
|
||||
}
|
||||
}
|
||||
if ($match) {
|
||||
$offset = $i
|
||||
break
|
||||
}
|
||||
if ($Machine -eq 0x8664) { $ArchName = "x64"; $IsArm64 = $false }
|
||||
elseif ($Machine -eq 0xAA64) { $ArchName = "ARM64"; $IsArm64 = $true }
|
||||
else {
|
||||
Write-Warning "Architecture not supported for patching Spotify.dll"
|
||||
Stop-Script
|
||||
}
|
||||
|
||||
if ($offset -eq -1) {
|
||||
Write-Warning "Required byte sequence not found for the signature reset patch"
|
||||
Write-Warning "Spotify Version: $offline | Architecture: $($archInfo.Architecture)"
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Write-Verbose "Architecture: $ArchName"
|
||||
|
||||
$NumberOfSections = [BitConverter]::ToUInt16($bytes, $e_lfanew + 0x06)
|
||||
$SizeOfOptionalHeader = [BitConverter]::ToUInt16($bytes, $e_lfanew + 0x14)
|
||||
$SectionTableStart = $e_lfanew + 0x18 + $SizeOfOptionalHeader
|
||||
|
||||
$Sections = @(); $CodeSection = $null
|
||||
for ($i = 0; $i -lt $NumberOfSections; $i++) {
|
||||
$secEntry = $SectionTableStart + ($i * 40)
|
||||
$VA = [BitConverter]::ToUInt32($bytes, $secEntry + 12)
|
||||
$RawSize = [BitConverter]::ToUInt32($bytes, $secEntry + 16)
|
||||
$RawPtr = [BitConverter]::ToUInt32($bytes, $secEntry + 20)
|
||||
$Chars = [BitConverter]::ToUInt32($bytes, $secEntry + 36)
|
||||
$SecObj = [PSCustomObject]@{ VA = $VA; RawPtr = $RawPtr; RawSize = $RawSize }
|
||||
$Sections += $SecObj
|
||||
if (($Chars -band 0x20) -ne 0 -and $CodeSection -eq $null) { $CodeSection = $SecObj }
|
||||
}
|
||||
|
||||
Write-Verbose "Sequence found at offset: 0x$($offset.ToString('X'))"
|
||||
|
||||
$patchOffset = $offset + ($searchPattern.Length - $bytesToReplaceCount)
|
||||
|
||||
Write-Verbose "Applying patch at offset: 0x$($patchOffset.ToString('X'))"
|
||||
|
||||
for ($i = 0; $i -lt $replacePattern.Length; $i++) {
|
||||
$fileBytes[$patchOffset + $i] = $replacePattern[$i]
|
||||
}
|
||||
|
||||
Write-Verbose "Writing patched file..."
|
||||
[System.IO.File]::WriteAllBytes($FilePath, $fileBytes)
|
||||
|
||||
}
|
||||
catch {
|
||||
Write-Error "An error occurred: $_"
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Write-Warning "PE Error in Spotify.dll"
|
||||
Stop-Script
|
||||
}
|
||||
|
||||
function Get-RVA($FileOffset) {
|
||||
foreach ($sec in $Sections) {
|
||||
if ($FileOffset -ge $sec.RawPtr -and $FileOffset -lt ($sec.RawPtr + $sec.RawSize)) {
|
||||
return ($FileOffset - $sec.RawPtr) + $sec.VA
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
Write-Verbose "Searching for function..."
|
||||
$StringBytes = [System.Text.Encoding]::ASCII.GetBytes($TargetStringText)
|
||||
$StringOffset = [ScannerCore]::FindBytes($bytes, $StringBytes)
|
||||
if ($StringOffset -eq -1) {
|
||||
Write-Warning "String not found in Spotify.dll"
|
||||
Stop-Script
|
||||
}
|
||||
$StringRVA = Get-RVA $StringOffset
|
||||
|
||||
$PatchOffset = 0
|
||||
if (-not $IsArm64) {
|
||||
$RawStart = $CodeSection.RawPtr; $RawEnd = $RawStart + $CodeSection.RawSize
|
||||
for ($i = $RawStart; $i -lt $RawEnd; $i++) {
|
||||
if ($bytes[$i] -eq 0x48 -and $bytes[$i + 1] -eq 0x8D -and $bytes[$i + 2] -eq 0x15) {
|
||||
$Rel = [BitConverter]::ToInt32($bytes, $i + 3)
|
||||
$Target = (Get-RVA $i) + 7 + $Rel
|
||||
if ($Target -eq $StringRVA) {
|
||||
$PatchOffset = [ScannerCore]::FindStart($bytes, $i, $false); break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$Results = [ScannerCore]::FindXref_ARM64($bytes, [uint64]$StringRVA, [uint64]$CodeSection.VA, [uint32]$CodeSection.RawPtr, [uint32]$CodeSection.RawSize)
|
||||
if ($Results.Count -gt 0) {
|
||||
$PatchOffset = [ScannerCore]::FindStart($bytes, $Results[0], $true)
|
||||
}
|
||||
}
|
||||
|
||||
if ($PatchOffset -eq 0) {
|
||||
Write-Warning "Function not found in Spotify.dll"
|
||||
Stop-Script
|
||||
}
|
||||
|
||||
$BytesToWrite = if ($IsArm64) { $Patch_ARM64 } else { $Patch_x64 }
|
||||
|
||||
$CurrentBytes = @(); for ($i = 0; $i -lt $BytesToWrite.Length; $i++) { $CurrentBytes += $bytes[$PatchOffset + $i] }
|
||||
$FoundHex = ($CurrentBytes | ForEach-Object { $_.ToString("X2") }) -join " "
|
||||
Write-Verbose "Found (Offset: 0x$($PatchOffset.ToString("X"))): $FoundHex"
|
||||
|
||||
if ($CurrentBytes[0] -eq $BytesToWrite[0] -and $CurrentBytes[$BytesToWrite.Length - 1] -eq $BytesToWrite[$BytesToWrite.Length - 1]) {
|
||||
Write-Warning "File Spotify.dll already patched"
|
||||
return
|
||||
}
|
||||
|
||||
Write-Verbose "Applying patch..."
|
||||
for ($i = 0; $i -lt $BytesToWrite.Length; $i++) { $bytes[$PatchOffset + $i] = $BytesToWrite[$i] }
|
||||
|
||||
try {
|
||||
[System.IO.File]::WriteAllBytes($FilePath, $bytes)
|
||||
Write-Verbose "Success"
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Write error in Spotify.dll $($_.Exception.Message)"
|
||||
Stop-Script
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1852,9 +1950,7 @@ function Remove-Signature-FromFiles([string[]]$fileNames) {
|
||||
$fullPath = Join-Path -Path $spotifyDirectory -ChildPath $fileName
|
||||
if (-not (Test-Path $fullPath)) {
|
||||
Write-Error "File not found: $fullPath"
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
try {
|
||||
Write-Verbose "Processing file: $fileName"
|
||||
@@ -1864,9 +1960,7 @@ function Remove-Signature-FromFiles([string[]]$fileNames) {
|
||||
}
|
||||
catch {
|
||||
Write-Error "Failed to process file '$fileName': $_"
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1943,9 +2037,7 @@ $test_js = Test-Path -Path $xpui_js_patch
|
||||
if ($test_spa -and $test_js) {
|
||||
Write-Host ($lang).Error -ForegroundColor Red
|
||||
Write-Host ($lang).FileLocBroken
|
||||
Write-Host ($lang).StopScript
|
||||
pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
|
||||
if ($test_js) {
|
||||
@@ -1962,16 +2054,12 @@ if ($test_js) {
|
||||
Start-Process $Url
|
||||
}
|
||||
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
|
||||
if (!($test_js) -and !($test_spa)) {
|
||||
Write-Host "xpui.spa not found, reinstall Spotify"
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
|
||||
if ($test_spa) {
|
||||
@@ -2027,9 +2115,7 @@ if ($test_spa) {
|
||||
}
|
||||
if (-not $v8_snapshot -and $null -eq $xpuiJsEntry) {
|
||||
Write-Warning "v8_context_snapshot file not found, cannot create xpui.js"
|
||||
Write-Host ($lang).StopScript
|
||||
Pause
|
||||
Exit
|
||||
Stop-Script
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Рэзервовае капіраванне hosts.bak..."
|
||||
HostDel = "Спроба выдаліць непажаданыя URL-адрасы з арыгінальнага файла hosts..."
|
||||
HostError = "Нешта пайшло не так пры рэдагаванні файла hosts, адрэдагуйце яго ўручную або запусціце сцэнарый ад імя адміністратара"
|
||||
PressAnyKey = "Націсніце любую клавішу, каб выйсці..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "hosts.bak ফাইলটি ব্যাকআপ রাখা হয়েছে..."
|
||||
HostDel = "অরিজিনাল হোস্ট ফাইল থেকে অপ্রত্যাশিত ইউআরএল মুছে ফেলার চেষ্টা করা হচ্ছে..."
|
||||
HostError = "হোস্ট ফাইল মুছে ফেলার সময় কিছু একটা সমস্যা হয়েছে, এটি ম্যানুয়ালি সম্পাদন করুন অথবা এডমিনিস্ট্রেটর হিসেবে স্ক্রিপ্টটি রান করুন"
|
||||
PressAnyKey = "Press any key to exit..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Zálohuji soubor hosts.bak..."
|
||||
HostDel = "Pokouším se odebrat nechtěné URL adresy z originálního souboru hosts..."
|
||||
HostError = "Něco se nepovedlo s úpravou souboru hosts, upravte ho manuálně nebo spusťte skript jako"
|
||||
PressAnyKey = "Stiskněte libovolnou klávesu pro ukončení..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Sichere hosts.bak..."
|
||||
HostDel = "Versuche, unerwünschte URLs von der originalen hosts-Datei zu entfernen..."
|
||||
HostError = "Beim Bearbeiten der hosts-Datei ist etwas schief gelaufen, bearbeiten Sie sie manuell oder führen Sie die Installation als Administrator aus"
|
||||
PressAnyKey = "Drücken Sie eine beliebige Taste zum Beenden..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Δημιουργείται αντίγραφο ασφαλείας hosts.bak..."
|
||||
HostDel = "Προσπάθεια κατάργησης ανεπιθύμητων διευθύνσεων URL από το αρχικό αρχείο hosts..."
|
||||
HostError = "Παρουσιάστηκε κάποιο πρόβλημα κατά την επεξεργασία του αρχείου hosts, επεξεργαστείτε το χειροκίνητα ή εκτελέστε το script ως διαχειριστής"
|
||||
PressAnyKey = "Πατήστε οποιοδήποτε πλήκτρο για έξοδο..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Backing up hosts.bak..."
|
||||
HostDel = "Trying to remove unwanted URLs from the original hosts file..."
|
||||
HostError = "Something went wrong while editing the hosts file, edit it manually or run the script as administrator"
|
||||
PressAnyKey = "Press any key to exit..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Haciendo una copia de seguridad de hosts.bak..."
|
||||
HostDel = "Intentando eliminar los URL no deseados del archivo hosts original..."
|
||||
HostError = "Algo salió mal al editar el archivo hosts; edítelo manualmente o ejecute el script como administrador"
|
||||
PressAnyKey = "Presione cualquier tecla para salir..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "پشتیبان گیری از hosts.bak"
|
||||
HostDel = "تلاش برای حذف URL های ناخواسته از فایل میزبان اصلی"
|
||||
HostError = "هنگام ویرایش فایل میزبان مشکلی پیش آمد، آن را به صورت دستی ویرایش کنید یا اسکریپت را صورت ادمینستریتور اجرا کنید"
|
||||
PressAnyKey = "برای خروج هر کلیدی را فشار دهید..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Varmuuskopioidaan hosts.bak..."
|
||||
HostDel = "Yritetään poistaa ei toivottuja URL-osoitteita alkuperäisestä hosts-tiedostosta..."
|
||||
HostError = "Jotain meni pieleen, hosts-tiedostoton muokkaamisessa, muokkaa sitä manuaalisesti tai suorita komentosarja järjestelmänvalvojana"
|
||||
PressAnyKey = "Paina mitä tahansa näppäintä poistuaksesi..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Nagbabackup ng hosts.bak..."
|
||||
HostDel = "Sinusubukang alisin ang mga hindi kanais-nais na URL mula sa orihinal na hosts file..."
|
||||
HostError = "May naging problema sa pag-eedit ng hosts file, i-edit ito ng manu-mano o patakbuhin ang script bilang administrator"
|
||||
PressAnyKey = "Pindutin ang anumang key upang lumabas..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Sauvegarde de hosts.bak..."
|
||||
HostDel = "Tentative de suppression des URLs indésirables du fichier hosts original..."
|
||||
HostError = "Quelque chose ne s'est pas bien passé lors de l'édition du fichier hosts, modifiez le manuellement ou lancez le script en tant qu'administrateur"
|
||||
PressAnyKey = "Appuyez sur n'importe quelle touche pour quitter..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "hosts.bak का बैकअप बनाया जा रहा है..."
|
||||
HostDel = "ओरिजिनल hosts फ़ाइल से गैर-जरूरी URLs को हटाने की कोशिश की जा रही है..."
|
||||
HostError = "hosts फ़ाइल को एडिट करते समय कोई समस्या हुई है। कृपया इसे मैनुअली एडिट करें या स्क्रिप्ट को एडमिनिस्ट्रेटर के रूप में चलाएँ"
|
||||
PressAnyKey = "Press any key to exit..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "A hosts.bak mentése..."
|
||||
HostDel = "A nem kívánt URL-ek eltávolítása az eredeti hosts fájlból..."
|
||||
HostError = "Valami hiba történt a hosts fájl szerkesztése közben, szerkeszd meg manuálisan, vagy futtasd a szkriptet rendszergazdaként."
|
||||
PressAnyKey = "Nyomjon meg egy gombot a kilépéshez..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Membuat cadangan hosts.bak..."
|
||||
HostDel = "Mencoba menghapus URL yang tidak diinginkan dari file hosts asli..."
|
||||
HostError = "Ada yang salah saat mengedit file hosts, edit manual atau jalankan skrip sebagai administrator"
|
||||
PressAnyKey = "Tekan sembarang tombol untuk keluar..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Backup di hosts.bak in corso..."
|
||||
HostDel = "Provo a rimuovere URL non desiderati dal file hosts originale..."
|
||||
HostError = "Qualcosa è andato storto durante la modifica del file hosts, modificalo manualmente o fai partire lo script come amministratore"
|
||||
PressAnyKey = "Premi un tasto qualsiasi per uscire..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "hosts.bak にバックアップ中..."
|
||||
HostDel = "元の hosts から望まない URL を削除中..."
|
||||
HostError = "hosts ファイルの編集中に不明の問題が発生、手動で編集するか、管理者としてスクリプトを実行してください"
|
||||
PressAnyKey = "終了するには何かキーを押してください..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "იქმნება hosts.bak-ის სარევეზნო ასლი..."
|
||||
HostDel = "ვცდილობთ რომ ამოვიღოთ არასასურველი URL-ები ორიგინალური მასპინძელის ფაილიდან..."
|
||||
HostError = "რაღაც შეცდომა მოხდა მასპინძელის ფაილის რედაქტირებისას, დაარედაქტირეთ ის ხელით ან გაუშვით სკრიპტი ადმინისტრატორის სახით"
|
||||
PressAnyKey = "დააჭირეთ ნებისმიერ ღილაკს გასასვლელად..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "hosts.bak 백업 파일을 생성하는 중..."
|
||||
HostDel = "원본 hosts 파일에서 불필요한 URL 제거를 시도하는 중..."
|
||||
HostError = "파일을 수정하는 데 오류가 발생했습니다, 직접 수정하거나 이 스크립트를 관리자 권한으로 실행해주세요"
|
||||
PressAnyKey = "종료하려면 아무 키나 누르십시오..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Dublē hosts.bak ..."
|
||||
HostDel = "Mēģina noņemt nevēlamus URL no sākotnējā hosts faila..."
|
||||
HostError = "Kaut kas greizi aizgāja rediģējot hosts failu, rediģējiet to manuāli vai palaidiet skriptu ar administratora privilēģijām"
|
||||
PressAnyKey = "Nospiediet jebkuru taustiņu, lai izietu..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Tworzenie kopii zapasowej pliku hosts.bak..."
|
||||
HostDel = "Próba usunięcia niechcianych adresów URL z oryginalnego pliku hosts..."
|
||||
HostError = "Coś poszło nie tak podczas edycji pliku hosts, edytuj go ręcznie lub uruchom skrypt jako administrator"
|
||||
PressAnyKey = "Naciśnij dowolny klawisz, aby wyjść..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Fazendo backup de hosts.bak..."
|
||||
HostDel = "Tentando remover URLs indesejados do arquivo hosts original..."
|
||||
HostError = "Algo deu errado ao editar o arquivo hosts, edite-o manualmente ou execute o script como Administrador"
|
||||
PressAnyKey = "Pressione qualquer tecla para sair..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Se efectuează o copie de siguranță a fișierului hosts.bak..."
|
||||
HostDel = "Se încearcă eliminarea URL-urilor nedorite din fișierul original hosts..."
|
||||
HostError = "Ceva nu a mers bine in timpul editării fișierului hosts, editează-l manual sau rulează scriptul ca Administrator."
|
||||
PressAnyKey = "Apăsați orice tastă pentru a ieși..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Создаю резервную копию hosts.bak..."
|
||||
HostDel = "Попытка удалить нежелательные Url-адреса из оригинального файла hosts..."
|
||||
HostError = "Что-то пошло не так при редактировании файла hosts, отредактируйте его вручную или запустите скрипт от администратора"
|
||||
PressAnyKey = "Нажмите любую клавишу для выхода..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Zálohujem súbor hosts.bak..."
|
||||
HostDel = "Pokúšam sa odobrať nechcené URLs z originálneho hosts súboru..."
|
||||
HostError = "Niečo sa nepodarilo s upravovaním súboru hosts, uprav ho manuálne alebo spusti skript ako administrátor"
|
||||
PressAnyKey = "Stlačte ľubovoľnú klávesu pre ukončenie..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Прављење резервне копије hosts.bak..."
|
||||
HostDel = "Покушавамо да уклонимо нежељене URL-ове из оригиналног фајла hosts..."
|
||||
HostError = "Нешто је пошло наопако током уређивања фајла hosts, уредите га ручно или покрените скрипту као администратор"
|
||||
PressAnyKey = "Press any key to exit..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Backar upp hosts.bak..."
|
||||
HostDel = "Försöker ta bort oönskade webbadresser från den ursprungliga hosts filen..."
|
||||
HostError = "Något gick fel vid redigering av hosts filen, redigera den manuellt eller kör skriptet som administratör"
|
||||
PressAnyKey = "Tryck på valfri tangent för att avsluta..."
|
||||
}
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "hosts.bak காப்புப்பிரதி..."
|
||||
HostDel = "Original host filesலிருந்து தேவையற்ற URL களை அகற்ற முயற்சிக்கிறது ..."
|
||||
HostError = "Hosts Filesயைத் திருத்தும் போது ஏதோ தவறு ஏற்பட்டது, அதை manualலாக திருத்தவும் அல்லது Scriptயை administratorராக இயக்கவும்"
|
||||
PressAnyKey = "Press any key to exit..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "hosts.bak dosyası yedekleniyor...."
|
||||
HostDel = "Orijinal hosts dosyasından istenmeyen URL'ler kaldırılmaya çalışılıyor..."
|
||||
HostError = "Hosts dosyasını düzenlerken bir şeyler ters gitti, elle düzenleyin veya kodu yönetici olarak çalıştırın"
|
||||
PressAnyKey = "Çıkmak için herhangi bir tuşa basın..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Бекап hosts.bak..."
|
||||
HostDel = "Спроба прибрати небажані посилання з оригінального файлу hosts..."
|
||||
HostError = "Щось пішло не так під час редагування файлу hosts, змініть його вручну, або спробуйте запустити скрипт від імені адміністратора"
|
||||
PressAnyKey = "Натисніть будь-яку клавішу, щоб вийти..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "Đang sao lưu hosts.bak..."
|
||||
HostDel = "Đang xóa các URL không cần thiết khỏi tệp hosts..."
|
||||
HostError = "Xảy ra lỗi khi đang chỉnh sửa tệp hosts. Hãy tự sửa hoặc chạy tệp này với tư cách quản trị viên"
|
||||
PressAnyKey = "Nhấn phím bất kỳ để thoát..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "正在備份 hosts.bak..."
|
||||
HostDel = "正在嘗試從原始 hosts 檔案中刪除不需要的網址..."
|
||||
HostError = "在編輯 hosts 檔案時發生了錯誤,請手動編輯或以系統管理員身分執行腳本"
|
||||
PressAnyKey = "按任意鍵退出..."
|
||||
}
|
||||
|
||||
@@ -46,4 +46,5 @@
|
||||
HostBak = "备份原始 hosts 文件为 hosts.bak..."
|
||||
HostDel = "正在试图从原始 hosts 文件中删除不需要的 URL..."
|
||||
HostError = "在编辑 hosts 文件时发生了错误,请手动编辑或以管理员身份重新运行该脚本。"
|
||||
PressAnyKey = "按任意键退出..."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user