Работа над приложением Qt. Я пытаюсь получить exe-файл, чтобы он возвращал контрольную сумму md5 во время работы. Как я могу это сделать?
Я попробовал это:
QFile theFile("file.exe");
QByteArray thisFile;
if (theFile.open(QIODevice::ReadOnly))
{
thisFile = theFile.readAll();
}
else
{
qDebug() << "Can't open";
}
qDebug() << QString("%1").arg(thisFile.length());
fileMd5 = QString(QCryptographicHash::hash((thisFile), QCryptographicHash::Md5).toHex().toUpper());
qDebug() << fileMd5;
Это не возвращает правильное значение, однако.
Обновить:
У меня это работает с другими файлами. Кажется, проблема в том, что я не могу прочитать exe-файл во время его работы.
Окончательное обновление:
Это решение:
QFile theFile(QCoreApplication::applicationFilePath());
QByteArray thisFile;
if (theFile.open(QIODevice::ReadOnly))
{
thisFile = theFile.readAll();
}
else
{
qDebug() << "Can't open file.";
}
QString fileMd5 = QString(QCryptographicHash::hash((thisFile), QCryptographicHash::Md5).toHex());
qDebug() << fileMd5;
Ты забыл позвонить open
на theFile
,
if (!theFile.open(QIODevice::ReadOnly))
// Handle error here
Кроме того, вы должны использовать QCoreApplication::applicationFilePath()
чтобы получить путь к исполняемому файлу.
Вы должны создать независимое приложение (назовем его myApp
), которые проверяют сумму MD5 и сравнивают ее с вашим PHP-скриптом и запрашивают обновление, если это необходимо, или загружают приложение напрямую.
Вот так : myApp
=> Нужно обновить? (Обновить) : (TheRealApp
)
Хорошо, похоже, он просто не нашел файл. Я пробовал абсолютный путь вместо родственника, и это сработало. Я должен выяснить, что происходит не так, но похоже, что он может читать сам во время работы.