我的自动更新程序需要管理员权限才能运行,因为它修改了程序文件夹中的文件。一切正常。
但是,更新完成后,我希望updater.exe
启动myApplication.exe
,但启用管理员权限。
我目前用来从updater.exe启动myApplication.exe的代码:
bool started = QDesktopServices::openUrl(QUrl::fromLocalFile(exeFileName));
if (started)
{
QApplication::quit();
}
问题是,当myApplication.exe
以管理员身份启动时,它会弄乱我的本地路径,例如:
QString addin_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
指向admin users文件夹。而不是运行应用程序的实际用户。
这里有什么想法吗?
更新
根据Merlin069的答案,我正在测试以下内容:
TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserName((TCHAR*)username, &size);
qDebug() << QHostInfo::localHostName();
QProcess::startDetached("runas \"/user:<" + QHostInfo::localHostName() + ">\"" + username + ""\" \"" + exeFileName + "\");
答案 0 :(得分:0)
我假设你在这里使用Windows。
您可以使用QProcess :: startDetached启动应用程序,并使用Windows RunAs命令行程序以其他用户身份运行。
例如: -
QProcess::startDetached("runas /user:<localmachinename>\user exeFileName");
如果路径包含空格,请用引号括起来: -
QProcess::startDetached("runas \"/user:<localmachinename>\user\" \"exeFileName\"");