我的自动更新程序需要管理员权限才能运行,因为它修改了程序文件夹中的文件。一切都很好。
但是,当更新完成后,我希望我的updater.exe启动myApplication.exe,但不需要管理特权的。
我目前用于从myApplication.exe启动updater.exe的代码:
bool started = QDesktopServices::openUrl(QUrl::fromLocalFile(exeFileName));
if (started)
{
QApplication::quit();
}问题是,当myApplication.exe作为管理员启动时,它会扰乱我的本地路径,例如:
QString addin_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);指向管理用户文件夹。而不是运行应用程序的实际用户。
这里有什么想法吗?
更新
基于Merlin069的回答,我正在测试以下内容:
TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserName((TCHAR*)username, &size);
qDebug() << QHostInfo::localHostName();
QProcess::startDetached("runas \"/user:<" + QHostInfo::localHostName() + ">\"" + username + ""\" \"" + exeFileName + "\");发布于 2014-04-28 12:08:51
我猜你在这里使用Windows。
您可以使用QProcess::startDetached启动应用程序,并使用鲁纳斯命令行程序作为不同的用户运行。
例如:-
QProcess::startDetached("runas /user:<localmachinename>\user exeFileName");如果路径包含空格,则用引号包围它们:-
QProcess::startDetached("runas \"/user:<localmachinename>\user\" \"exeFileName\"");https://stackoverflow.com/questions/23338959
复制相似问题