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