C# 运行为WinXP设计的应用程序时出现Win7 UAC问题

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

Application2最初是为WinXP开发的应用程序。现在我必须在Win7上处理用户帐户控制(UAC)。只要用户登录到管理员帐户并选择“以管理员身份运行”,Application2就可以在Win7上正常运行。但是,我正在尝试评估是否可以折射Application2,以便它不需要管理员帐户和“以管理员身份运行”如果可能的话,我还希望避免出现任何要求用户做出选择的对话框

当前需要“以管理员身份运行”的Application2功能

  • 创建系统数据源(ODBC)
  • 读取/写入/删除注册表项
  • 复制/删除
    C:\Program files\MyApp中的文件
  • C:\Program files\MyApp中的文件进行加密/解密
  • 启动远程计算机上共享文件夹中的.exe进程
  • 启动安装Office加载项和读取/写入/删除注册表项的VBScript进程
  • 复制/删除/修改
    C:\Program files\MyApp\MyData中的文件
  • 第6个问题可以通过将此文件夹重新定位到“我的文档”(其位置存储在注册表*)中,或授予用户对
    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,但它确实会成为非提升和
    程序文件
    等情况下的一个因素。