refactor(install-manager): update apm execution path to shell-caller.sh

This commit is contained in:
Elysia
2026-01-28 22:26:37 +08:00
parent 071aa36fb4
commit d529dd6e5e
3 changed files with 41 additions and 14 deletions

View File

@@ -151,11 +151,11 @@ ipcMain.on('queue-install', async (event, download_json) => {
let execParams = []; let execParams = [];
if (superUserCmd.length > 0) { if (superUserCmd.length > 0) {
execCommand = superUserCmd; execCommand = superUserCmd;
execParams.push('/usr/bin/apm'); execParams.push('/opt/apm-app-store/extras/shell-caller.sh');
} else { } else {
execCommand = '/usr/bin/apm'; execCommand = '/opt/apm-app-store/extras/shell-caller.sh';
} }
execParams.push('install', '-y', pkgname); execParams.push('apm', 'install', '-y', pkgname);
const task: InstallTask = { const task: InstallTask = {
id, id,
@@ -252,7 +252,7 @@ ipcMain.handle('check-installed', async (_event, pkgname: string) => {
logger.info(`检查应用是否已安装: ${pkgname}`); logger.info(`检查应用是否已安装: ${pkgname}`);
let child = spawn('/usr/bin/apm', ['list', '--installed', pkgname], { let child = spawn('/opt/apm-app-store/extras/shell-caller.sh', ['apm', 'list', '--installed', pkgname], {
shell: true, shell: true,
env: process.env env: process.env
}); });
@@ -290,11 +290,11 @@ ipcMain.on('remove-installed', async (_event, pkgname: string) => {
let execParams = []; let execParams = [];
if (superUserCmd.length > 0) { if (superUserCmd.length > 0) {
execCommand = superUserCmd; execCommand = superUserCmd;
execParams.push('/usr/bin/apm'); execParams.push('/opt/apm-app-store/extras/shell-caller.sh');
} else { } else {
execCommand = '/usr/bin/apm'; execCommand = '/opt/apm-app-store/extras/shell-caller.sh';
} }
let child = spawn(execCommand, [...execParams, 'remove', '-y', pkgname], { let child = spawn(execCommand, [...execParams, 'apm', 'remove', '-y', pkgname], {
shell: true, shell: true,
env: process.env env: process.env
}); });
@@ -348,10 +348,10 @@ ipcMain.handle('list-upgradable', async () => {
ipcMain.handle('list-installed', async () => { ipcMain.handle('list-installed', async () => {
const superUserCmd = await checkSuperUserCommand(); const superUserCmd = await checkSuperUserCommand();
const execCommand = superUserCmd.length > 0 ? superUserCmd : '/usr/bin/apm'; const execCommand = superUserCmd.length > 0 ? superUserCmd : '/opt/apm-app-store/extras/shell-caller.sh';
const execParams = superUserCmd.length > 0 const execParams = superUserCmd.length > 0
? ['/usr/bin/apm', 'list', '--installed'] ? ['/opt/apm-app-store/extras/shell-caller.sh', 'apm', 'list', '--installed']
: ['list', '--installed']; : ['apm', 'list', '--installed'];
const { code, stdout, stderr } = await runCommandCapture(execCommand, execParams); const { code, stdout, stderr } = await runCommandCapture(execCommand, execParams);
if (code !== 0) { if (code !== 0) {
@@ -374,10 +374,10 @@ ipcMain.handle('uninstall-installed', async (_event, pkgname: string) => {
} }
const superUserCmd = await checkSuperUserCommand(); const superUserCmd = await checkSuperUserCommand();
const execCommand = superUserCmd.length > 0 ? superUserCmd : '/usr/bin/apm'; const execCommand = superUserCmd.length > 0 ? superUserCmd : '/opt/apm-app-store/extras/shell-caller.sh';
const execParams = superUserCmd.length > 0 const execParams = superUserCmd.length > 0
? ['/usr/bin/apm', 'remove', '-y', pkgname] ? ['/opt/apm-app-store/extras/shell-caller.sh', 'apm', 'remove', '-y', pkgname]
: ['remove', '-y', pkgname]; : ['apm', 'remove', '-y', pkgname];
const { code, stdout, stderr } = await runCommandCapture(execCommand, execParams); const { code, stdout, stderr } = await runCommandCapture(execCommand, execParams);
const success = code === 0; const success = code === 0;

27
extras/shell-caller.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/bin/bash
# 检查是否提供了至少一个参数
if [[ $# -eq 0 ]]; then
echo "错误:未提供命令参数。用法: $0 apm <子命令> [参数...]"
exit 1
fi
# 严格验证第一个参数必须是 "apm"
if [[ "$1" != "apm" ]]; then
echo "拒绝执行:仅允许执行 'apm' 命令。收到的第一个参数: '$1'"
exit 1
fi
# 检查 apm 命令是否存在
if ! command -v apm &>/dev/null; then
echo "apm 命令未找到,请确保已安装 APM 环境"
exit 127
fi
# 执行 apm 命令(跳过第一个参数 "apm"
output=$(/usr/bin/apm "${@:2}" 2>&1)
exit_code=$?
echo "$output"
exit $exit_code

View File

@@ -12,7 +12,7 @@
<allow_inactive>yes</allow_inactive> <allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active> <allow_active>yes</allow_active>
</defaults> </defaults>
<annotate key="org.freedesktop.policykit.exec.path">/opt/apm-app-store/extras/apm-installer</annotate> <annotate key="org.freedesktop.policykit.exec.path">/opt/apm-app-store/extras/shell-caller.sh</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action> </action>
</policyconfig> </policyconfig>