Я «унаследовал» проект, который работал нормально, но мы обновили его для работы с visual studio 2015 и версией 5.12.1.
Но по какой-то причине он теперь дает исключение. Что он в основном делает, так это проверяет местоположение в regedit (которое написано из другого приложения) и читает строковое значение (которое записывает пользователей). Это следующий запрос:
CMD:
wmic /node:127.0.0.1 /user: "User" /password:"Password" class stdregprov call GetStringValue hDefKey="&H80000007" sSubKeyName=Software\Company\ApplicationServer sValueName=USERS"
Когда я запускаю его из cmd, он возвращает результат и дает тот же результат в приложении.
Возвращаемое значение: OUT:
Executing (stdregprov)->GetStringValue()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
sValue = "";
}
Но когда он пытается кодек в приведенном ниже коде, он дает исключение нарушения прав доступа. Обратите внимание, что cmd - это параметры, которые мы отправили в cmd (как показано выше), а out - ответ (как показано выше).
void MyUtil::runProcess(QString& cmd, QString& out, QString& arr){
QProcess process;
process.start(cmd);
proces.waitForFinished(osProcessTimeout*1000);
if(cmd.contains("sValueName=USERS")){ //which is true for our problem
QByteArray arr = process.readAllStandardOutput();
QTextCodec *codec = QTextCodec::codecForName("857");
out = codec->toUnicode(arr); // ----> WHERE IT GIVES THE EXCEPTION
}else{
out = process.readAllStandardOutput();
}
err = process.readAllStandardError();
}