我们有一套程序可以在启动时检查新版本,然后根据需要下载新版本以运行。当Windows 7被锁定为“标准用户”时,这显然是一个问题,因为它们无法写入c:\ program files目录及其下方。有人看过一个可以解决问题的应用程序示例吗?
我们的应用程序是用Delphi编写的,但任何语言的示例都很有用。
提前致谢
更新
我们已经有了一个系统来确定是否存在新版本,唯一的问题是下载和安装(如果需要),因为这需要提升。我想不出一种不需要提升提示的方法,也不会想到我们的用户会降低他们的安全设置。
更新2:
我问了一个subsequent question,而不是在这里添加一个新的
答案 0 :(得分:7)
应用程序安装有两个选项:
广告2:Google Chrome这样做。它在这里安装.exe:
%LOCALAPPDATA%\谷歌\铬\应用\的chrome.exe
- 的Jeroen
答案 1 :(得分:6)
通常情况下,如果应用程序需要升级权限,您会看到应用程序执行的操作。
这是一种非常常见的情况,特别是因为要更新自己的DLL,无论如何都需要进入辅助进程。
答案 2 :(得分:3)
以下是一些有关更新挑战的提示:
我们公司销售专门帮助Windows 7 UAC自动更新的软件(您可以点击此处访问AutoUpdate +:link text)。使用第三方解决方案的最佳理由 - 任何解决方案 - 都是您可以更灵活地使用更新,并避免支持不同Windows版本的挑战。
答案 3 :(得分:1)
或者你可以拥有它以便用户运行启动器应用程序。
答案 4 :(得分:1)
您的应用可以检查远程服务器上是否有新版本。如果是,则可以在用户特定文件夹之一下载更新文件,例如用户的临时文件夹。您可以使用SHGetSpecialFolder API函数获取此类特殊文件夹的地址。
下载完成后,您可以弹出一个对话框,告诉用户您已准备好进行更新。如果用户同意更新,则可以使用提升的权限(以管理员身份)运行更新程序进程,并且更新程序进程可以使用已在用户Temp文件夹中下载的文件替换安装路径中的现有文件。要以管理员身份运行更新程序,可以使用ShellExecute:
ShellExecute(0,'runas','notepad.exe',nil,nil,SW_SHOWNORMAL);
更新完成后,您的更新程序进程可以重新启动您的应用程序。
答案 5 :(得分:1)
您需要为更新工作提供单独的可执行文件。更新程序需要有一个清单,标记为需要提升。
答案 6 :(得分:1)
如果您的应用程序使用MSI(Windows Installer)作为其安装程序,那么User Account Control Patching,如果配置正确,可以让您安装更新而不提升。
答案 7 :(得分:0)
如果您的安装程序未在管理员下运行,则无需任何其他权限即可安装更新。
如果您的安装程序是在admin下运行的 - 那么它可以在Task Sheduler中创建一个任务。比如说,每周运行一次此任务,在此帐户(admin)和最高权限下运行。任务将是您的更新程序。简单。