我创建了一个代码,它将客户端(在PC中)的XML文件与位于FTP服务器上的XML文件进行比较;一旦检测到客户端正在运行旧版程序,它将下载最新版本(以便用户始终拥有最新程序)。
这是诀窍。由于我在运行时覆盖文件这一事实,我不得不创建一个外部控制台应用程序,如果用户想要更新,该应用程序将从主应用程序调用。这样,首先执行控制台应用程序,然后关闭主应用程序,这样系统就不会锁定任何文件(否则应用程序的.exe文件将被锁定,我们无法用新文件替换它。)< / p>
如果将该进程安装在系统文件夹以外的其他位置(我的意思是C:\Program Files\
驱动器),则此过程运行完美。如果用户决定在那里安装主应用程序,那么突然我的应用程序崩溃,因为它没有管理员权限。
我在发布此应用时使用的是Install Shield LE,使用此程序的用户不是管理员(这意味着当我/用户安装此程序时,我会转到每台计算机并输入管理员密码)。
有没有办法,如何使用管理员权限执行我更新的控制台应用程序,或者如何通过Install Shield定义一旦执行此应用程序,我总是希望它以管理员身份执行?
希望我的解释不会令人困惑。如果有必要,我非常乐意分享其他细节,因为我需要弄清楚如何解决这个问题。
答案 0 :(得分:1)
您需要将以下行添加到您的应用清单中:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
msdn上的文档是here。
答案 1 :(得分:1)
我想你不会像Emmanuel建议的那样拥有AD配置,因为在这种情况下,您可以毫无问题地推送更新,而不必设计自动更新程序。
我不知道InstallShield是否有这样的东西,但Advanced Installer支持安装专用的updater that runs as a service,因此它具有在Program Files下安装应用程序所需的所有权限。
当然,这意味着您需要将更新程序替换为Advanced Installer中的更新程序,并且最终用户计算机上的应用程序的初始安装仍需要管理员凭据。 (未来安装可以安静地安装,无需用户干预)