如何查找和删除在我的代码中需要管理员权限的位置?

我有一个多进程应用程序,最初是在XP中开发的,最初设计时完全没有考虑管理员权限。我们曾经使用软件配置和销售计算机。我们现在正在将应用程序单独销售,不再带有硬件,安装在企业环境的用户系统中。目前,我们的软件包需要用户以管理员模式运行,这不受我们客户IT部门的欢迎。

我一直在努力删除明显需要管理员权限的项目(在注册表中写入HKLM,在Program Files文件夹中写入)。但是,Windows仍然需要管理员权限来运行软件。如果我拒绝授权,软件将关闭,没有日志。它有很多遗留代码,因此很难找到发生管理员访问的地方。

有没有一种简单的方法可以查看正在访问或执行什么操作,从而满足Windows 10管理员要求?

目前,我已经将我可以识别的数据文件的写入移动到Program Data文件夹或用户文档中(具体取决于我想让用户能否轻松找到它们)。

配置文件已经移到用户文件夹中。

注册表键访问已保持为HKLU或在HKLM中为只读。

点赞
用户2379024
用户2379024

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

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

我删除了"runas"动词,现在系统不再要求在启动的代码片段上使用管理员权限。

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

2019-05-20 16:32:59