Используйте popen или ShellExecute для программного получения вывода winget из командной строки, НЕ работает
Сначала я установил winget-cli и открыл командную строку на устройстве, я могу получить версию winget.
см. изображение1 на [https://user-images.githubusercontent.com/22248019/127574830-3f01c414-09c2-4a29-bbe6-60a62ea49b18.pngestive[1]
На устройстве также установлено наше приложение с функцией, которая может программно получать выходные данные из командной строки. Например, когда вы вводите «ipconfig» из нашего приложения, вы можете получить информацию об IP-адресе устройства. Но когда я ввожу «winget -v», мне возвращается только «winget» не распознается как внутренняя или внешняя команда ». На следующем рисунке показан результат работы нашего приложения. Вы можете видеть, что ввод команд будет иметь правильные выходные данные, кроме команды winget
см. изображение 2 на [https://user-images.githubusercontent.com/22248019/127573134-9b78ad99-9c0b-4671-b146-62c60ef74866.pngestive[2]
Фрагмент кода выглядит так:
char sBuffer[256];
while (fgets(sBuffer, sizeof(sBuffer) - 1, pipe) != NULL) {
cout << "winget version result:" + sBuffer;
}
Does anyone know why this not working
[1]: https://user-images.githubusercontent.com/22248019/127574830-3f01c414-09c2-4a29-bbe6-60a62ea49b18.png
[2]: https://user-images.githubusercontent.com/22248019/127573134-9b78ad99-9c0b-4671-b146-62c60ef74866.png
1 ответ
Ошибка связана с контекстом, в котором работает приложение. Диспетчер пакетов Windows предоставляется через установщик приложений из Microsoft Store. Пакеты MSIX регистрируются для пользователя, а не для системы. Если код приложения выполняется в контексте зарегистрированного пользователя, а ошибка все еще сохраняется, по ознакомьтесь с руководствомустранению неполадок.