C# 运行为WinXP设计的应用程序时出现Win7 UAC问题
Application2最初是为WinXP开发的应用程序。现在我必须在Win7上处理用户帐户控制(UAC)。只要用户登录到管理员帐户并选择“以管理员身份运行”,Application2就可以在Win7上正常运行。但是,我正在尝试评估是否可以折射Application2,以便它不需要管理员帐户和“以管理员身份运行”如果可能的话,我还希望避免出现任何要求用户做出选择的对话框 当前需要“以管理员身份运行”的Application2功能C# 运行为WinXP设计的应用程序时出现Win7 UAC问题,c#,windows-7,.net-2.0,uac,C#,Windows 7,.net 2.0,Uac,Application2最初是为WinXP开发的应用程序。现在我必须在Win7上处理用户帐户控制(UAC)。只要用户登录到管理员帐户并选择“以管理员身份运行”,Application2就可以在Win7上正常运行。但是,我正在尝试评估是否可以折射Application2,以便它不需要管理员帐户和“以管理员身份运行”如果可能的话,我还希望避免出现任何要求用户做出选择的对话框 当前需要“以管理员身份运行”的Application2功能 创建系统数据源(ODBC) 读取/写入/删除注册表项 复制/删除C
C:\Program files\MyApp中的文件
C:\Program files\MyApp中的文件进行加密/解密
C:\Program files\MyApp\MyData中的文件
C:\Program Files\MyApp\MyData
的“完全控制”权限,或让Win7在VirtualStore文件夹中进行必要的修改来解决
数字3和4更难处理,因为Application1必须读取C:\Program files\MyApp
中的文件。Application1将不会使用“以管理员身份运行”,我需要做更多的研究来找出如何使用VirtualStore文件夹来弥合Application2和Application1之间的差距
至于其他几点,我正试图找出解决办法:
C:\Program Files\MyApp\MyData
后删除C:\mydocuments\MyData
,并且我需要修改存储文件夹路径的注册表项,也许这些步骤可以在安装过程中完成
发现 在Windows 7上,即使没有“以管理员身份运行”,您也可以:
C:\Users\Public\Documents
或C:\Users\currentuser\Documents
HKEY\U CURRENT\U USER中创建/删除注册表项
此外,我认为没有UAC应用程序清单文件的Windows 7应用程序是危险的。因为,如果您没有,Windows 7将为您决定是否以兼容模式运行应用程序。如果您有一个,您可以指定应用程序需要如何运行。不,您不能在没有提升的情况下执行这些操作。UAC的目的不是阻止您这样做,而是让用户知道您将要这样做。UAC的一个明显而有价值的特性是,它不会在用户不知道的情况下提供一个后门来做这些事情。这不是问题,这是一个功能
你所描述的并没有让我觉得是需要经常发生的事情。这不应该让用户疲惫不堪。如果这是一个问题,您可以使用管理员帐户从计划任务运行它。最好的做法是更改您的应用程序(请注意,只需稍微更改),使其以非提升用户的身份运行。为了帮助你做到这一点,我必须指出一些微妙之处 例如,第1点“读取和写入注册表项”过于笼统。非提升的应用程序可以读取和写入注册表项,完全没有问题。限制是您不能在HKLM中写入注册表项。因此,如果您将代码更改为使用HKCU下的密钥,或者将部分代码重构为运行提升并将密钥写入HKLM的admin/config/setup应用程序,以及读取这些密钥但从不写入密钥的普通应用程序,则可以避免UAC问题 第2点和第3点都是“无法写入程序文件下的任何内容”。请更改代码,使需要复制/删除/加密/解密的文件不在程序文件下。AppData是此应用程序的常用(每个用户)位置
远离整个虚拟化过程,故意尝试使用虚拟存储。这让用户非常困惑。相反,要充分了解非提升应用程序无法执行的行为,并调整代码以执行(非常类似的)替换行为,例如使用HKCU代替HKLM或使用AppData代替程序文件。不幸的是,这种情况经常发生。需要澄清的是,您是说用户需要是管理员,并且需要为列出的所有操作启动“以管理员身份运行”应用程序吗?即使这样,你还会遇到对话吗?如果用户不是管理员,那么这些操作可能吗?如果你是对的,我想这就回答了我的问题。欢迎提供任何其他信息或建议+1、谢谢。(1) Application1从HKLM读取数据,我对此没有控制权,因此Application2也需要修改HLKM。(2) 同样,应用程序1从
程序文件中读取。(3) 我不打算故意使用VirtualStore,但它确实会成为非提升和程序文件
等情况下的一个因素。