feat: kill install process after exiting game (#864)

* feat: kill install process after exiting game

* Restore en.json

* fix some key incorrect

* gui: update for VRChat OSC Fix

* fix: may incorrectly kill unrelated processes

* fix: pattern incorrect
This commit is contained in:
RingLo_
2024-08-07 16:54:39 +08:00
committed by GitHub
parent c3f4771f4d
commit 6465dc0910
4 changed files with 81 additions and 27 deletions
+32 -9
View File
@@ -15,7 +15,7 @@ namespace VRCX
CheckGameRunning(); CheckGameRunning();
} }
/// <summary> /// <summary>
/// Checks if the VRChat game and SteamVR are currently running and updates the browser's JavaScript function $app.updateIsGameRunning with the results. /// Checks if the VRChat game and SteamVR are currently running and updates the browser's JavaScript function $app.updateIsGameRunning with the results.
/// </summary> /// </summary>
@@ -40,7 +40,7 @@ namespace VRCX
if (MainForm.Instance?.Browser != null && !MainForm.Instance.Browser.IsLoading && MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame) if (MainForm.Instance?.Browser != null && !MainForm.Instance.Browser.IsLoading && MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame)
MainForm.Instance.Browser.ExecuteScriptAsync("$app.updateIsGameRunning", isGameRunning, isSteamVRRunning, isHmdAfk); MainForm.Instance.Browser.ExecuteScriptAsync("$app.updateIsGameRunning", isGameRunning, isSteamVRRunning, isHmdAfk);
} }
/// <summary> /// <summary>
/// Kills the VRChat process if it is currently running. /// Kills the VRChat process if it is currently running.
/// </summary> /// </summary>
@@ -54,6 +54,29 @@ namespace VRCX
return processes.Length; return processes.Length;
} }
/// <summary>
/// Kills the install.exe process after exiting game.
/// </summary>
/// <returns>Whether the process is killed (true or false).</returns>
public bool KillInstall()
{
bool isSuccess = false;
var processes = Process.GetProcessesByName("install");
foreach (var p in processes)
{
// "E:\SteamLibrary\steamapps\common\VRChat\install.exe"
var match = Regex.Match(p.MainModule.FileName, "(.+?\\\\VRChat.*)(!?\\\\install.exe)");
if (match.Success)
{
p.Kill();
isSuccess = true;
break;
}
}
return isSuccess;
}
/// <summary> /// <summary>
/// Starts the VRChat game process with the specified command-line arguments. /// Starts the VRChat game process with the specified command-line arguments.
/// </summary> /// </summary>
@@ -71,13 +94,13 @@ namespace VRCX
var path = match.Groups[1].Value; var path = match.Groups[1].Value;
// var _arguments = Uri.EscapeDataString(arguments); // var _arguments = Uri.EscapeDataString(arguments);
Process.Start(new ProcessStartInfo Process.Start(new ProcessStartInfo
{ {
WorkingDirectory = path, WorkingDirectory = path,
FileName = $"{path}\\steam.exe", FileName = $"{path}\\steam.exe",
UseShellExecute = false, UseShellExecute = false,
Arguments = $"-applaunch 438100 {arguments}" Arguments = $"-applaunch 438100 {arguments}"
}) })
?.Close(); ?.Close();
return true; return true;
} }
} }
+40 -18
View File
@@ -11246,27 +11246,44 @@ speechSynthesis.getVoices();
database.addGamelogEventToDatabase(entry); database.addGamelogEventToDatabase(entry);
break; break;
case 'vrc-quit': case 'vrc-quit':
if (!this.vrcQuitFix || !this.isGameRunning) { if (!this.isGameRunning) {
break; break;
} }
var bias = Date.parse(gameLog.dt) + 3000; if (this.vrcQuitFix) {
if (bias < Date.now()) { var bias = Date.parse(gameLog.dt) + 3000;
console.log('QuitFix: Bias too low, not killing VRC'); if (bias < Date.now()) {
break; console.log('QuitFix: Bias too low, not killing VRC');
} break;
AppApi.QuitGame().then((processCount) => {
if (processCount > 1) {
console.log(
'QuitFix: More than 1 process running, not killing VRC'
);
} else if (processCount === 1) {
console.log('QuitFix: Killed VRC');
} else {
console.log(
'QuitFix: Nothing to kill, no VRC process running'
);
} }
}); AppApi.QuitGame().then((processCount) => {
if (processCount > 1) {
console.log(
'QuitFix: More than 1 process running, not killing VRC'
);
} else if (processCount === 1) {
console.log('QuitFix: Killed VRC');
} else {
console.log(
'QuitFix: Nothing to kill, no VRC process running'
);
}
});
}
if (this.vrcOSCFix) {
setTimeout(() => {
AppApi.KillInstall().then((processKilled) => {
if (processKilled) {
console.log(
'OSCFix: Killed Install.exe'
);
} else {
console.log(
'OSCFix: Nothing to kill, no Install.exe process running'
);
}
});
}, 2000);
}
break; break;
case 'openvr-init': case 'openvr-init':
this.isGameNoVR = false; this.isGameNoVR = false;
@@ -15394,6 +15411,10 @@ speechSynthesis.getVoices();
'VRCX_vrcQuitFix', 'VRCX_vrcQuitFix',
true true
); );
$app.data.vrcOSCFix = await configRepository.getBool(
'VRCX_vrcOSCFix',
true
);
$app.data.vrBackgroundEnabled = await configRepository.getBool( $app.data.vrBackgroundEnabled = await configRepository.getBool(
'VRCX_vrBackgroundEnabled', 'VRCX_vrBackgroundEnabled',
false false
@@ -15573,6 +15594,7 @@ speechSynthesis.getVoices();
this.relaunchVRChatAfterCrash this.relaunchVRChatAfterCrash
); );
await configRepository.setBool('VRCX_vrcQuitFix', this.vrcQuitFix); await configRepository.setBool('VRCX_vrcQuitFix', this.vrcQuitFix);
await configRepository.setBool('VRCX_vrcOSCFix', this.vrcOSCFix);
await configRepository.setBool( await configRepository.setBool(
'VRCX_vrBackgroundEnabled', 'VRCX_vrBackgroundEnabled',
this.vrBackgroundEnabled this.vrBackgroundEnabled
+4
View File
@@ -424,6 +424,10 @@
"header": "VRChat Quit Fix", "header": "VRChat Quit Fix",
"description": "Kill VRChat after exiting game" "description": "Kill VRChat after exiting game"
}, },
"vrchat_osc_fix": {
"header": "VRChat OSC Fix",
"description": "Kill install process after exiting game"
},
"auto_cache_management": { "auto_cache_management": {
"header": "Automatically Manage Cache When Closing VRChat", "header": "Automatically Manage Cache When Closing VRChat",
"description": "Auto delete old versions from cache" "description": "Auto delete old versions from cache"
+5
View File
@@ -443,6 +443,11 @@ mixin settingsTab()
div.options-container-item div.options-container-item
span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.vrchat_quit_fix.description') }} span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.vrchat_quit_fix.description') }}
el-switch(v-model="vrcQuitFix" @change="saveOpenVROption") el-switch(v-model="vrcQuitFix" @change="saveOpenVROption")
//- Advanced | VRChat OSC Fix
span.sub-header {{ $t('view.settings.advanced.advanced.vrchat_osc_fix.header') }}
div.options-container-item
span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.vrchat_osc_fix.description') }}
el-switch(v-model="vrcOSCFix" @change="saveOpenVROption")
//- Advanced | Auto Cache Management //- Advanced | Auto Cache Management
span.sub-header {{ $t('view.settings.advanced.advanced.auto_cache_management.header') }} span.sub-header {{ $t('view.settings.advanced.advanced.auto_cache_management.header') }}
div.options-container-item div.options-container-item