我正在创建一个自我更新的应用程序,而我在Vista上遇到的一个问题是Windows 7需要具有管理员权限才能更新客户端。我遇到的问题是客户的用户在受限制的权限下运行,他们必须让IT登录到需要更新客户端的每台机器,因为用户无法使用。
我正在考虑的一个可能的工作是将启动器应用程序正常安装到Program Files中,并将其更新的真实应用程序安装在某个用户文档中,以便他们可以在没有IT的情况下更新和运行新版本参与进来。
我想知道在这条道路上走下去之前我在这里遇到的潜在问题或者我应该注意什么。我知道click-once做了非常相似的事情,我会使用它,除了我需要能够进行静默更新,没有任何用户交互。
答案 0 :(得分:1)
这是应该的样子。大多数IT部门最不希望的是用户随机更新一个软件。这可能会产生各种无意的副作用,例如与旧版本文件不兼容,新功能和可能不安全的功能等。这就是IT部门禁用Windows Update并以受控方式手动更新的原因。
如果用户想要更新版本的软件,他们应该从他们的IT部门请求它。这些计算机和基础设施不属于他们,他们只是从他们工作的公司那里借用时间,以便他们能够完成自己的工作。
答案 1 :(得分:1)
只安装一个程序是否存在问题?例如,它特别大吗?
您是否需要管理员权限才能运行您的程序?
如果没有,您可能不需要Program Files文件夹。
我建议您完全不要安装到Program Files,只需将程序安装到<userfolder>\AppData\ProgramName
的用户文件夹系统中即可。
如果您正在使用.NET,请查看ClickOnce deployment mechanism。它有一个很好的自我更新功能,可能会让你的生活更轻松。
修改:刚看到你的最后一句话。 ClickOnce可以强制用户更新。
答案 2 :(得分:1)
有几件事:
如果您决定将应用程序移动到文档中的某个位置,请确保您的应用程序将数据透明地写入程序的安装位置,例如:如果代码中的任何地方都存在指向错误位置的硬编码路径。也许这对你来说不是问题,但可能需要牢记。
当我们决定实施“实时更新”功能时,我们几乎以同样的方式解决了这个问题。但我们安装了一个以管理员权限运行的服务。一旦程序需要更新,该服务又可以运行安装程序。使用这种类型的解决方案,您甚至不必将应用程序移出程序文件。
干杯!
编辑:
以管理员身份运行服务的另一个巧妙之处。是你可以用它创建命名管道通信并让它为你做的事情,就像你不能像普通用户那样做。
答案 3 :(得分:0)
加载程序存根是一个很好的方法。唯一的问题是当你必须更新装载机时;同样的初始问题适用(虽然这应该是非常罕见的)。
我能想到的一个问题是,你已经超越了让事情更加“安全”的整个想法。由于您的可执行文件存在于非管理员应该完全可以访问的位置,因此其他内容可能会破坏您的exe,从而破坏安全性。
答案 4 :(得分:0)
您可以使用AppLocker。虽然我不再运行Vista,但它可能只适用于Win7。 ;)