From 86a19567ff5e496513e9c139556fee4c3c1003a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Sat, 28 Mar 2026 16:40:33 +0300 Subject: [PATCH] feat: implement IPC handlers for service management and add MySQL configuration template --- config/my.ini.template | 1 + src/main/ipc/index.ts | 5 ++++- src/main/services/ProcessManager.ts | 13 ++++++++----- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/config/my.ini.template b/config/my.ini.template index cb18370..fa7828e 100644 --- a/config/my.ini.template +++ b/config/my.ini.template @@ -1,6 +1,7 @@ [mysqld] port={{PORT}} datadir="{{DATADIR}}" +tmpdir="{{DATADIR}}" socket="{{SOCKET}}" character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci diff --git a/src/main/ipc/index.ts b/src/main/ipc/index.ts index 0f8abae..38b56e0 100644 --- a/src/main/ipc/index.ts +++ b/src/main/ipc/index.ts @@ -67,7 +67,7 @@ export function registerIpcHandlers(): void { return { success: false, message: 'Nginx konfigürasyon hatası! Log sekmesini kontrol edin.' } } - const success = await processManager.startService('nginx', binPath, ['-p', nginxPrefix, '-c', configPath], true) + const success = await processManager.startService('nginx', binPath, ['-p', nginxPrefix, '-c', configPath], false) return { success, message: success ? 'Nginx başlatıldı.' : 'Nginx devreye alınamadı (Hata loglarını kontrol edin).' } } @@ -90,6 +90,9 @@ export function registerIpcHandlers(): void { if (!binPath) return { success: false, message: 'MySQL executable bulunamadı. Lütfen indirin.' } + // Force kill any existing instances before starting + await processManager.forceKillAll('mysql') + // Initialize if data directory is empty if (!fs.existsSync(dataDir) || fs.readdirSync(dataDir).length === 0) { if (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true }) diff --git a/src/main/services/ProcessManager.ts b/src/main/services/ProcessManager.ts index aad7368..3d749ee 100644 --- a/src/main/services/ProcessManager.ts +++ b/src/main/services/ProcessManager.ts @@ -1,4 +1,4 @@ -import { spawn, ChildProcess, exec } from 'child_process' +import { spawn, ChildProcess } from 'child_process' import path from 'path' import { app } from 'electron' import fs from 'fs' @@ -65,7 +65,7 @@ export class ProcessManager { async runOnce(binPath: string, args: string[], name?: string): Promise { return new Promise((resolve) => { - const child = spawn(binPath, args, { stdio: 'pipe', shell: true, windowsHide: true }) + const child = spawn(binPath, args, { stdio: 'pipe', shell: false, windowsHide: true }) child.stdout?.on('data', (data) => { const out = data.toString() @@ -157,10 +157,13 @@ export class ProcessManager { const executableName = name === 'nginx' ? 'nginx.exe' : name === 'php' ? 'php-cgi.exe' : 'mysqld.exe' this.addLog(name, `Force killing all ${executableName} processes...`) - exec(`taskkill /F /IM ${executableName} /T`, (_err) => { - // If it fails, usually it means the process isn't running, which is fine - resolve(true) + const child = spawn('taskkill', ['/F', '/IM', executableName, '/T'], { + windowsHide: true, + shell: false }) + + child.on('close', () => resolve(true)) + child.on('error', () => resolve(true)) }) }