2

在 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;
4

3 回答 3

0

您必须创建一个独立的应用程序(我们称之为它myApp)检查 MD5sum 并将其与您的 PHP 脚本进行比较,并在需要时要求更新或直接加载应用程序。

像这样:myApp=>需要更新吗?(更新):(TheRealApp

于 2013-10-16T15:23:45.487 回答
0

好的,看起来它只是没有找到文件。我尝试了绝对路径而不是相对路径,它起作用了。我必须弄清楚出了什么问题,但看起来它可以在运行时自行读取。

于 2013-10-16T15:26:31.237 回答
0

你忘记打电话opentheFile

if (!theFile.open(QIODevice::ReadOnly))
    // Handle error here

此外,您应该使用它QCoreApplication::applicationFilePath()来获取可执行文件的路径。

于 2013-10-16T15:05:36.593 回答