λ‘컬μμλ μ λλ Engine.exeκ°
λ°°ν¬λ§ νλ©΄β¦
π₯Ά "μμ§ νμ΄νμ μ°κ²°λμ΄ μμ§ μμ΅λλ€."
ElectronμΌλ‘ λ§λ λ°μ€ν¬ν μ±μ .exe
λ‘ ν¨ν€μ§ν΄μ λ°°ν¬νμ λ μμλ μ€μ μ¬κ±΄μ
λλ€.
λΆλͺ κ°λ° μ€μλ μ무 λ¬Έμ μμμ΅λλ€.
λ°°ν¬νλ©΄? κ°μκΈ° μ°κ²°μ΄ μ λ©λλ€.
exe
λ λͺ» μ€νν©λλ€μ²μμ μ΄λ κ² μ½λλ₯Ό μ§°μμ£ .
const enginePath = path.join(__dirname, 'public', 'Engine.exe')
λ‘컬μμλ μ΄κ² μ μλν©λλ€.
νμ§λ§ Electron Builderκ° λ°°ν¬μ©μΌλ‘ λΉλν λλβ¦
C:\Users\...\resources\app.asar\public\Engine.ex
app.asar
μμ μμΆλΌλ²λ¦¬μ£ .
λ¬Έμ λ μ΄ μνμμλ .exe
μ€νμ΄ μ λλ€λ κ²!
extraResources + unpack
μ΅μ
μΆκ°κ·Έλμ μ΄λ κ² electron-builder
μ€μ μ κ³ μ³€μ΅λλ€.
"build": {
"extraResources": [
{
"from": "public",
"to": "public",
"filter": ["**/*"],
"unpack": true}
]
κ·Έλ¦¬κ³ μ½λμμ κ²½λ‘λ μλμ²λΌ λ³κ²½νμ΅λλ€.
const enginePath = path.join(process.resourcesPath, 'app.asar.unpacked', 'public', 'Engine.exe');
μ΄μ λλμ΄ λ°°ν¬ λ²μ μμλ exe
κ° μ€νλ μ€ μμμ΅λλ€.
κ·Έλ°λ°...
λΆλͺ
ν app.asar.unpacked
μ μ λ€μ΄κ° μλλ°λ μ€νμ΄ μ λλ κ²λλ€.
κ·Έλμ μ§μ cmd
λ₯Ό μ΄μ΄μ μμ§ κ²½λ‘λ‘ κ°μ μ€νν΄λ΄€μ΅λλ€.
cd C:\Users\...\resources\app.asar.unpacked\public\
./seph_engine.exe
μ΄λ? π€― μλ μ€νμ λλ€?
κ·Έλ¬λκΉ λ¬Έμ λ νμΌμ΄ μμ΄μκ° μλλΌ Electronμ΄ μ€νμ λͺ» μν¨λ€
λ κ±°μλ κ²λλ€.
spawn
νΈμΆνλλ?μ무 μΌλ μΌμ΄λμ§ μμμ΅λλ€.
μλ¬΄λ° μλ¬λ μμ΄, μ무κ²λ μ€νλμ§ μλ spawn
.
Logger.info(`[ENGINE] spawn μ±κ³΅, PID: ${engineProcess.pid}`);
PID: undefined π
μλ λβ¦?
μμ§μ΄ μ λμκ°λ Pipeλ μ°κ²°μ΄ μ λ©λλ€.
[PIPE] reqClientκ° nullμ
λλ€.
[PIPE] reqClientλ writableνμ§ μμ΅λλ€.
κ·Έλ¦¬κ³ μ¬μ©μμκ²λ μ΄λ° λ©μμ§λ‘ κ°μ£ .
β οΈ βμμ§ νμ΄νμ μ°κ²°λμ΄ μμ§ μμ΅λλ€.β
Electronμμ spawn()
μ μΈλΆ μ€ννμΌμ μ§μ μ€νν©λλ€.
νμ§λ§ λ°°ν¬ λ²μ μμλ 보μ μ μ± + κ²½λ‘ λ¬Έμ + κΆν λ¬Έμ λ‘ μΈν΄β¦
π£ "spawnμ΄ μλ μ ν©λλ€"
μ¬μ§μ΄ κ²½λ‘λ μλ²½νκ² μΈν©ν΄λ¨λλ°μ?
C:\Users\me\AppData\Local\Programs\MyApp\resources\app.asar.unpacked\public\seph_engine.exe
μ΄κ±°λ₯Ό μλμΌλ‘ cmd
μμ μ€ννλ©΄ λλλ°μ?!
Electronλ§ λͺ»ν©λλ€ π±
exec("start /B")
λ‘ ν΄κ²°νμ΅λλ€
const command = `start /B "" "${enginePath}"`;
exec(command, { cwd: engineDir, windowsHide: true });
start /B
λ μλμ° CMD λͺ
λ Ήμ΄λ‘ "CMDμμ λ°±κ·ΈλΌμ΄λλ‘ μ€ννλΌ"λ λ»μ
λλ€.
Electronμ΄ μ§μ μ€ννμ§ μμ§λ§, CMDκ° λμ μ€νν΄μ£Όλ λ°©μμ λλ€.
μλμ°μμλ μ΄κ² μ€νλ € λ νμ€νκ² μ€νλλκ΅°μ.
βοΈ κ·Έλ¦¬κ³ μ΄ λ°©λ²μΌλ‘ λλμ΄ λ°°ν¬μμλ μλ²½νκ² λμκ°μ΅λλ€!
λ¬Έμ | ν΄κ²° λ°©λ² |
---|---|
.exe μ€ν μ€ν¨ | app.asar.unpacked μ λ£κΈ° + process.resourcesPath μ¬μ© |
μ€νμ λλλ° Electronμ΄ λͺ» μ€νν¨ | exec("start /B ...") λ°©μμΌλ‘ CMD κ°μ μ€ν |
κ°λ°μ μ¬λ¬λΆβ¦
βλ‘컬μμλ μ λμ΅λλ€λ§β¦β
μ΄ λ§, μ΄μ μ μ μ¬λ¦¬μ§ λ§μλ€β¦
Electronμ λ°°ν¬κ° λ°μ λλ€. μλ, λ°°ν¬κ° μ§μ§ μ μμ λλ€. πͺ
νΉμ μ¬λ¬λΆλ λ°°ν¬μμ .exe
μ€νμ΄ μ λΌμ κ³ ν΅λ°κ³ κ³μ λ€λ©΄
μ λ°©λ² κΌ μλν΄λ³΄μΈμ. μ λ°λμ μ μλ μ μμ΅λλ€ π