2009-01-15 70 views
3

即时通讯编写一个应用程序,下载和安装需要将数据保存到程序文件(针对有问题的程序)的程序的插件。现在这可以在xp和vista上正常工作,禁用uac,但由于虚拟文件夹的原因,它在正常vista上失败。避免UAC在远景

如何避免这种情况,无需每次启动应用程序都要求管理员权限?

P.s.程序是用C++编写,可见2005年

编辑:文件系统虚拟文件夹:http://www.codeproject.com/KB/vista-security/MakingAppsUACAware.aspx

+0

触发UAC到底是什么?呃,请原谅我的无知,但什么是虚拟文件夹? – hasen 2009-01-15 01:20:42

+0

为什么每次应用程序启动时,插件都需要写入Program Files中的其他文件夹?难道只有在你安装插件时才会发生这种情况?你可能想要在你想要做的事情上变得更清楚一些......绕开UAC看起来像是一个更大的设计问题的症状。 – romandas 2009-01-15 01:22:26

+0

虚拟文件夹是地方Vista保存文件,而不是普通的文件夹。例如,当保存到程序文件时,vista会将其重定向到用户文档设置中的文件夹,以便系统的其他用户从未存在该文件。 – Lodle 2009-01-15 01:39:45

回答

0

我通过制作一个Windows服务来完成我需要的工作,并且只在应用程序运行时运行。

9

安装过程中只写入程序文件。之后,写入用户文件夹。

您可以稍后提升应用程序权限,但您只需延迟提示。 UAC的重点在于防止随机应用程序写入需要管理员权限的文件夹。 (好吧,不是整点,而是它的一大部分)

您可以创建一个具有管理权限的服务并向其发送命令以将下载的文件移动到所需的目标目录中,但是这会打开用户系统被其他应用程序滥用,如果你不仔细设计它。

This article talks关于让应用程序与UAC良好地协同工作。另外,see this article在这里。

1

当我告诉他们必须编写第二个应用程序时,Microsoft向我推荐,因为它需要管理权限。您可以使用此应用程序将文件从安全位置(如users programdata目录)部署到程序文件目录(请注意,如果您的DLL未签名,则这是一个巨大的安全漏洞,因为病毒/恶意用户可能会操纵函数调用之前的文件)。

您的非管理应用程序可以调用此应用程序,这将触发UAC。理解UAC的人不会在乎并乐意点击你的应用程序。那些讨厌它的人会关掉它。如果用户取消UAC对话框,启动新进程(需要管理员权限)的调用将引发win32异常,因此要注意这一点。

Vista中的问题是,它试图通过虚拟化您的程序文件目录来帮助您,如果您不是管理员。根据设计,除非您是管理员,否则您无法写入程序文件目录。

另一种选择是将所有“更新”创建为MSI更新。这种方式的Windows安装程序将触发UAC为您,你可以提供一个徽标为您的软件等

选项3是使用clickonce部署,这将允许您自动更新程序没有UAC,但你住在一个沙箱上用户系统可能不适用于您的应用程序的当前设计。