【问题标题】:QT Start program as regular user以普通用户身份启动 QT 程序
【发布时间】:2014-04-28 10:42:39
【问题描述】:

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

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

指向管理员用户文件夹。而不是运行应用程序的实际用户。

这里有什么想法吗?

更新

根据 Merlin069 的回答,我正在测试以下内容:

TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserName((TCHAR*)username, &size);

qDebug() << QHostInfo::localHostName();

QProcess::startDetached("runas \"/user:<" + QHostInfo::localHostName() + ">\"" + username + ""\" \"" + exeFileName + "\");

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    我假设您在这里使用的是 Windows。

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

    例如:-

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

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

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

    【讨论】:

    • 我怎样才能找出我应该以什么用户身份运行?还有我如何找出本地机器名?
    • 您应该可以使用 Google 轻松搜索到该内容。例如,要获取登录用户:msdn.microsoft.com/en-us/library/421tdddx.aspx 或本地机器名称:stackoverflow.com/questions/504810/…。或者,使用 Qt 作为主机名:QHostInfo::localHostName().
    • 刚刚注意到RunAs命令需要用户输入密码
    • 你能确认一下吗?如果来自管理员帐户,我希望不会出现这种情况。
    • 是的,可以确认,我的 updater.exe 以管理员身份运行,但是当上面的代码触发时,我收到一个 cmd 提示,要求我输入用户的密码
    猜你喜欢
    • 2016-06-24
    • 2020-06-04
    • 2021-12-27
    • 2019-08-27
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多