QT以普通用户身份启动程序

时间:2014-04-28 10:42:40

标签: c++ qt

我的自动更新程序需要管理员权限才能运行,因为它修改了程序文件夹中的文件。一切正常。

但是,更新完成后,我希望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 + "\");

1 个答案:

答案 0 :(得分:0)

我假设你在这里使用Windows。

您可以使用QProcess :: startDetached启动应用程序,并使用Windows RunAs命令行程序以其他用户身份运行。

例如: -

QProcess::startDetached("runas /user:<localmachinename>\user exeFileName");

如果路径包含空格,请用引号括起来: -

QProcess::startDetached("runas \"/user:<localmachinename>\user\" \"exeFileName\"");