Permissions 从文档而不是程序文件运行应用程序

Permissions 从文档而不是程序文件运行应用程序,permissions,self-updating,Permissions,Self Updating,我正在创建一个自我更新的应用程序,我在Vista和Windows 7上遇到的一个问题是需要有管理员权限才能更新客户端。我遇到了客户机的问题,这些客户机的用户在受限权限下运行,他们必须让它登录到需要更新客户机的每台计算机上,因为用户无法进行更新 我正在考虑的一个可能的解决办法是将launcher应用程序正常安装到程序文件中,并将它更新的真实应用程序安装在用户文档的某个地方,这样他们就可以在不涉及它的情况下更新和运行新版本 我想知道我在这里错过了什么潜在的陷阱,或者在走这条路之前我应该知道什么。我知

我正在创建一个自我更新的应用程序,我在Vista和Windows 7上遇到的一个问题是需要有管理员权限才能更新客户端。我遇到了客户机的问题,这些客户机的用户在受限权限下运行,他们必须让它登录到需要更新客户机的每台计算机上,因为用户无法进行更新

我正在考虑的一个可能的解决办法是将launcher应用程序正常安装到程序文件中,并将它更新的真实应用程序安装在用户文档的某个地方,这样他们就可以在不涉及它的情况下更新和运行新版本


我想知道我在这里错过了什么潜在的陷阱,或者在走这条路之前我应该知道什么。我知道click once做的事情非常类似,我会使用它,只是我需要能够在没有任何用户交互的情况下进行无声更新。

加载程序存根是一种很好的方法。唯一的问题是当你必须更新加载程序时;同样的初始问题也适用(尽管这种情况应该很少发生)


我脑海中浮现的一个问题是,你完全没有考虑让事情更加“安全”。因为你的可执行文件所在的位置应该是非管理员完全可以访问的,所以有可能是其他什么东西会猛击你的可执行文件,从而破坏安全性

应该是这样的。大多数IT部门最不希望看到的是用户随机更新软件。这可能会产生各种意外的副作用,例如与旧版本的文件不兼容、新功能以及可能不安全的功能等。这就是IT部门禁用Windows Update并以受控方式手动进行更新的原因


如果用户需要软件的更新版本,应向其it部门请求。这些计算机和基础设施不属于他们,他们只是从他们工作的公司借来时间来完成他们的工作。

只安装一次程序有问题吗?例如,它特别大吗

运行程序是否需要管理员权限

如果不需要,很可能您不需要ProgramFiles文件夹

我建议您完全放弃安装到程序文件,只需将您的程序安装到用户文件夹系统
\AppData\ProgramName

如果您碰巧正在使用.NET,请查看。它有一个很好的自我更新功能,可能会让你的生活更轻松

编辑:刚刚看到你的最后一句话。ClickOnce可以强制用户进行更新。

有几件事:

如果您决定将应用程序移动到文档中的某个位置,请确保应用程序将数据透明地写入安装程序的位置,例如,如果代码中的任何位置存在指向错误位置的硬编码路径。也许这对你来说不是一个问题,但可能需要记住

当我们决定实现“实时更新”功能时,我们以几乎相同的方式解决了这个问题。但是我们安装了一个具有管理员权限的服务。一旦程序需要更新,该服务可以运行安装程序。使用这种类型的解决方案,您甚至不必将应用程序移出程序文件

干杯

编辑:


让服务以管理员身份运行是另一件好事。您可以使用它创建一个命名管道通信,并让它为您做一些事情,就像普通用户无法做的那样。

您可能可以利用它。虽然我不再运行Vista,但它可能只适用于Win7

实际上,我正在开发两个独立的应用程序。一个是一个信息亭,需要能够在没有任何用户交互的情况下进行更新。Clickonce要求用户点击几次来安装更新,因此它不符合我对该应用程序的要求,我希望对这两个应用程序使用相同的更新方法。我仍然认为Clickonce是最好的解决方案——完全无提示的更新并不是最好的UI,IMO——但您仍然可以通过安装到用户的文件夹系统而不是程序文件文件夹来解决问题。您的程序以用户的权限运行,用户可以读取/写入AppData,没有问题。巴达宾,巴达博姆,不需要提升。我在理论上同意你。问题的一部分是我们的开发过程,它是早期发布,经常发布。我们已经有了一个检测更新的过程,然后提示下载并启动安装程序来更新它。这导致一个客户机出现问题,尤其是一个客户机锁定了计算机,并且必须进行更新。由于我们大约一周有一次更新,这对他们的IT部门来说非常烦人。他们的IT部门抱怨一直是走这条路的原因。我建议与他们合作,尽可能轻松地部署他们的网络。如果他们手工更新所有的东西,他们会很难做到。