Выполнение команды WSL из кода C ++ над окнами - PullRequest
0 голосов
/ 05 октября 2018

Я запускаю код c ++ в Windows, из которого я хочу выполнить команды на wsl.

Вот команды:

ShellExecuteA(NULL, "open", "cmd", "bash -c \"rm -f /tmp/xyz.log\"" , NULL, SW_SHOW);

и,

system("start \"bash -c \"rm -f /tmp/xyz.log\"\"");

Я пробовал оба вышеупомянутых, но это не работает.Хотя эти команды работают в командной строке WSL.

1 Ответ

0 голосов
/ 05 октября 2018

Я попытался повторить это и сразу же столкнулся с этой проблемой.После некоторой путаницы я нашел эту ссылку и понял, что мой тестовый проект был нацелен на x86 вместо x64.Дух ...

wsl.exe и bash.exe - это 64-битные файлы, хранящиеся в c:\Windows\System32.Если вы попытаетесь запустить их из приложения x86, они, похоже, будут отсутствовать.Это связано с тем, что Windows отображает другую , 32-битную папку c:\Windows\System32 для 32-битных приложений.64-битная папка System32 появится под C:\Windows\Sysnative.

Простое решение - изменить цель на x64.Как только это будет сделано, даже

system("wsl ls -la");

или

system("bash -c ls -la");

Просто работайте.

Для приложений x86 решение заключается в использовании абсолютного пути в Sysnative, например:

system("c:/windows/sysnative/bash -c ls -la");

или

system("c:/windows/sysnative/wsl -c ls -la");
...