Application2 是orginally开发的WinXP应用程序。现在我必须在Win7上与用户帐户控制(UAC)竞争。只要用户登录管理员帐户并选择“以管理员身份运行”, Application2 就可以在Win7上正常运行。但是,我正在尝试评估是否可以折射 Application2 ,以便它不需要管理员帐户和“以管理员身份运行”。我还想避免任何需要用户做出选择的对话框。
Application2 目前需要“以管理员身份运行”的功能
C:\Program Files\MyApp
C:\Program Files\MyApp
C:\Program Files\MyApp\MyData
可以通过将此文件夹重新定位到“我的文档”(其位置存储在注册表中*)或授予用户“{1}}的”完全控制“权限,或让Win7进行必要的修改来解决6号问题。 VirtualStore文件夹。
数字3和4更难处理,因为 Application1 必须读取C:\Program Files\MyApp\MyData
中的文件。 Application1 将不会使用“以管理员身份运行”,我需要进行更多研究,以弄清楚VirtualStore文件夹如何用于弥合 Application2 和<之间的差距EM>应用1
至于其他方面,我正在试图找出选项:
* 在这里大声思考:我需要在复制到C:\Program Files\MyApp
后删除C:\Program Files\MyApp\MyData
,我需要修改存储文件夹路径的注册表项,也许这些步骤可能是在安装过程中完成。
发现
在Windows 7上,即使没有“以管理员身份运行”,您也可以:
C:\My Documents\MyData
或C:\Users\Public\Documents
C:\Users\currentuser\Documents
此外,我认为拥有没有UAC应用程序清单文件的Windows 7应用程序非常危险。因为,如果您没有,Windows 7会决定是否在兼容模式下运行应用程序。如果您有一个,可以指定您的应用程序需要运行的方式。
答案 0 :(得分:2)
不,你不能在没有升高的情况下做这些事情。 UAC的意思是不阻止你这样做,它是让用户知道你即将这样做。 UAC的一个明显而有价值的特性是,在用户不知情的情况下,它无法提供后门来做这些事情。这不是问题,它是一个功能。
你所描述的并不会让我感到需要经常发生的事情。这不应该磨损用户。如果这是一个问题,您可以使用管理员帐户从计划任务运行它。
答案 1 :(得分:1)
最好的办法是更改您的应用程序 - 只是稍微一点,请注意 - 以便它作为非提升用户运行。为了帮助你做到这一点,我必须指出一些细微之处。
例如,第1点“读写注册表项”过于笼统。非提升的应用程序可以并且可以读取和写入注册表项,完全没有问题。限制是您无法在 HKLM 中编写注册表项。因此,如果您将代码更改为使用HKCU下的密钥,或者将某些代码重构为运行提升并将密钥写入HKLM的admin / config / setup应用程序,以及读取这些代码的普通应用程序,则可以避免UAC问题键但从不写它们。
第2点和第3点都是“无法写入程序文件下的任何内容”。更改您的代码,以便您需要复制/删除/加密/解密的文件不在Program Files下。 AppData是一个受欢迎的(每个用户)位置。
远离整个虚拟化的事物并故意尝试使用虚拟商店。它极大地困扰了用户。相反,要非常了解非提升的应用程序无法执行的行为,并调整代码以执行(非常相似的)替换行为,例如使用HKCU而不是HKLM或AppData而不是程序文件。