У меня есть пакетный файл, который я вызываю из С++ с помощью system("name.bat")
. В этом пакетном файле я пытаюсь прочитать значение раздела реестра. Вызов командного файла из С++ приводит к ошибке set KEY_NAME=HKEY_LOCAL_MACHINE\stuff
.
Однако, когда я запускаю пакетный файл (дважды щелкнув его), он работает нормально. Не уверен, что я делаю неправильно.
Пакетный файл:
set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Ansoft\Designer\2014.0\Desktop
set VALUE_NAME=InstallationDirectory
REG QUERY %KEY_NAME% /v %VALUE_NAME%
Файл С++:
int main(void)
{
system("CALL C:\\HFSS\\setup_vars.bat");
return 0;
}
ОБНОВЛЕНИЕ 1:
Я узнал, что ключ действительно находится в 64-битном реестре, и я строил свое С++-решение как 32-разрядное. Как только я исправил это, он нашел ключ реестра в порядке.
Теперь у меня возникла проблема с добавлением этого пути к моей переменной PATH. Вместо создания системной переменной создается пользовательская переменная PATH и добавляется там.
Работает из командной строки.
код:
set KEY_NAME=HKLM\SOFTWARE\Ansoft\Designer\2014.0\Desktop\
set VALUE_NAME=InstallationDirectory
FOR /F "usebackq skip=1 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME%`) DO (
set ValueName=%%A
set ValueType=%%B
set ValueValue=%%C
)
if defined ValueName (
@echo Value Value = %ValueValue%
) else (
@echo %KEY_NAME%\%VALUE_NAME% not found.
)
:: Set PATH Variable
set path_str=%PATH%
set addPath=%ValueValue%;
echo %addPath%
echo %ValueValue%
echo %PATH%| find /i "%addPath%">NUL
if NOT ERRORLEVEL 1 (
SETX PATH "%PATH%
) else (
SETX PATH "%PATH%;%addPath%;" /M
)
ОБНОВЛЕНИЕ 2:
Я переместил расположение опции /M и теперь добавляет к правой переменной PATH.
Однако, когда я это делаю, он добавляет PATH более одного раза (3 раза), а затем добавляет путь к визуальной папке amd64 для студии.
Я уверен, почему это происходит.