v0.8.9 : piloter un autre PC depuis l'IA (poste distant ajean-remote)

This commit is contained in:
nathaninline committed 2026-08-11 14:58:15 +02:00
1 parent 6d36464971
commit 7fa5461136
27 files changed
+2432 -49

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
package nodeclient
import (
"context"
"os/exec"
"syscall"
)
// shellCmd construit la commande shell sur Windows : cmd.exe, fenêtre cachée.
//
// ⚠️ On passe la ligne de commande BRUTE via CmdLine plutôt que par Args. Sinon
// Go ré-échappe les guillemets internes (EscapeArg) et cmd.exe reçoit une ligne
// mal formée : `dir "C:\Users\X"` renvoyait « syntaxe du nom de fichier
// incorrecte », alors que la même commande sans guillemets marchait. Avec
// `cmd /S /C "<commande>"`, l'option /S dit à cmd de ne retirer QUE le premier et
// le dernier guillemet et d'exécuter le reste tel quel — les chemins entre
// guillemets (avec espaces) passent alors correctement.
func shellCmd(ctx context.Context, command string) *exec.Cmd {
cmd := exec.CommandContext(ctx, "cmd")
// `chcp 65001>nul &` force la sortie de cmd en UTF-8. Sinon cmd émet dans la
// codepage OEM (CP850 en FR) : les accents (« Répertoire », « numéro ») et le
// séparateur de milliers arrivaient en octets non-UTF-8 → rendus « � » une fois
// sérialisés en JSON. Avec /S, cmd ne retire que le 1er et le dernier guillemet,
// donc les guillemets internes de la commande passent intacts.
cmd.SysProcAttr = &syscall.SysProcAttr{
HideWindow: true,
CmdLine: `cmd /S /C "chcp 65001>nul & ` + command + `"`,
}
return cmd
}