mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
v0.8.9 : piloter un autre PC depuis l'IA (poste distant ajean-remote)
This commit is contained in:
1 parent
6d36464971
commit
7fa5461136
27 files changed
+2432
-49
No files matched your search
@@ -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
|
||||
}
|
||||
Reference in new issue
Block a user