2013-12-11 4 views
0

У меня есть две проблемы с импортом реестра из файла.Импорт реестра из файлов

импортировать мои файлы реестра с regedit.exe:

string file = "regedit.exe /s D://ImageArchiveHour-1207150440.reg"; 
const char* ctv = file.c_str(); 

bool result = system(ctv); 

В моем примере, файл реестра успешно импортируется, но результат является ложным. Как я могу получить результаты импорта?

Другая проблема: если мой путь к файлу реестра содержит SPACE, импорт не удастся.

Например:

string file = "regedit.exe /s D://New Folder//ImageArchiveHour-1207150440.reg"; 
const char* ctv = file.c_str(); 

system(ctv); 

Как вы можете видеть, что есть место в новой папке.

Как это исправить? Или есть ли другой способ сделать это?

+1

'regedit' не вернет код выхода, поэтому' system' вернет 0, это означает, что все в порядке. Связано: http://stackoverflow.com/questions/18296926/vbscript-can-i-get-an-exit-code-from-running-regedit-s – ForEveR

ответ

2

0 - результат импорта. system возвращает -1 об ошибке, но см. Ссылку на возможные возвращаемые значения. Если все в порядке, оно вернет код выхода из операции regedit, 0 = ERROR_SUCCESS.

Если команда NULL и командный интерпретатор найден, возвращается ненулевое значение. Если интерпретатор команд не найден, он возвращает 0 и устанавливает errno в ENOENT. Если команда не равна NULL, система возвращает значение, возвращаемое командным интерпретатором. Он возвращает значение 0 только в том случае, если интерпретатор команд возвращает значение 0. Возвращаемое значение - 1 указывает на ошибку, а errno устанавливается на одно из следующих значений: ...

Операция не выполнена пространство из-за пути command line parameters are parsed. Вы должны заключить свой путь в кавычки (см. MSDN C++ Character Literals).

Так что ваши

string file = "regedit.exe /s D://ImageArchiveHour-1207150440.reg";

будет

string file = "regedit.exe /s \"D://ImageArchiveHour-1207150440.reg\"";

+0

Большое вам спасибо за очень быстрый ответ и решение forcurse для моей проблемы , Исправлена ​​проблема пути –

0

Я вижу, у вас есть ответ, но я хочу сказать, что если есть место на пути некоторых файл, вы должны использовать кавычки; поэтому я бы написал строку как: string file = "regedit.exe /s \"D://New Folder//ImageArchiveHour-1207150440.reg\""

Смежные вопросы