【问题标题】:How do I find (and remove) locations in my code that require administrator privileges?如何在我的代码中查找(并删除)需要管理员权限的位置?
【发布时间】:2019-05-20 03:44:24
【问题描述】:

我有一个多进程应用程序,它最初是在 XP 中开发的,最初设计时没有考虑管理员权限。我们曾经用该软件配置和销售计算机。我们现在单独销售该应用程序,无需硬件,可安装在公司环境中的用户系统上。目前我们的软件包要求我们的用户在管理员模式下运行,这并没有使我们在客户 IT 部门中受欢迎。

我一直在努力删除显然需要管理员权限的项目(写入注册表中的 HKLM,写入 Program Files 文件夹)。但是,Windows 仍然需要管理员权限才能运行该软件。如果我否认这些权利,它会在没有日志的情况下关闭。它有很多遗留代码,因此很难找到管理员访问发生位置的提示。

是否有一种简单的方法可以查看正在访问或完成的哪些内容符合 Windows 10 管理员要求?

目前,我已将我可以识别的数据文件的移动写入删除到 Program Data 文件夹或用户文档。 (取决于我是否希望用户能够轻松找到他们)。

配置文件已移至用户文件夹。

注册表项访问权限已保留到 HKLU 或在 HKLM 中为只读。

【问题讨论】:

  • 不能简单调试一下吗?
  • @user2379024 您的软件中有 UAC 清单吗?如果是这样,您将requestedExecutionLevel 设置为什么?确保不是requireAdministrator
  • @RemyLebeau 我可能记错了很久以前看到的东西;可能与检测安装程序/安装程序有关。也许缺少清单就足以触发它?
  • Jabberwocky -> 不幸的是它在调试中没有遇到访问问题。仅在安装位置...并在启动时立即。我必须在设置测试时发挥创造力才能找到它。
  • @user2379024 -> 我检查了所有清单...都设置为“asinvoker”

标签: c++ windows lua privileges administrator


【解决方案1】:

感谢大家的帮助。我最终在我们软件的基于 C# 的启动器中找到了答案,该启动器使用动词“runas”启动所有进程:

        try
        {
            myProcess.StartInfo.Verb = "runas";
            myProcess.StartInfo.FileName = command;
            myProcess.StartInfo.WorkingDirectory = workingDir;
            myProcess.StartInfo.Arguments = prams;
            myProcess.Start();

} 捕获(异常前){}

我删除了“runas”动词,现在系统不再请求对已启动的代码段的管理员权限。

当我尝试从 Program Files 目录设置调试运行并在不通过启动器的情况下启动代码时,我找到了原因。 (在调试器中启动)系统没有请求管理权限,这导致我回到启动器。我最近让启动器在不需要管理权限的情况下运行,所以我认为问题出在其他进程中。好像我错了。

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2022-08-20
    相关资源
    最近更新 更多