代码之家  ›  专栏  ›  技术社区  ›  Timothy Strimple

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

  •  3
  • Timothy Strimple  · 技术社区  · 16 年前

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

    我正在考虑的一个可能的解决办法是让启动程序应用程序像平常一样安装到程序文件中,并让它更新的实际应用程序安装在用户文档中的某个地方,这样他们就可以更新和运行新的版本,而不会涉及到它。

    我想知道我在这里遗漏了什么潜在的问题,或者在走上这条路之前我应该知道什么。我知道click-once做了一些非常相似的事情,我会使用它,除非我需要能够进行静默更新,而不需要任何用户交互。

    5 回复  |  直到 16 年前
        1
  •  1
  •   Soviut    16 年前

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

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

        2
  •  1
  •   Randolpho    16 年前

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

    运行程序需要管理员权限吗?

    如果没有,很可能你不需要程序文件文件夹。

    我建议您完全放弃安装到程序文件,只需将您的程序安装到位于 <userfolder>\AppData\ProgramName .

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

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

        3
  •  1
  •   ralphtheninja    16 年前

    一些事情:

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

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

    干杯!

    编辑:

    让服务以管理员身份运行的另一个好处是。你可以用它创建一个命名管道通信,让它为你做一些事情,就像你不能作为一个普通用户那样。

        4
  •  0
  •   Michael Todd    16 年前

    装载机存根是一个很好的方法。唯一的问题是当您必须更新加载器时;同样的初始问题也适用(尽管这应该很少发生)。

    我能想到的一个问题是,你超越了让事情更“安全”的整个想法。因为你的可执行文件存在于一个非管理员完全可以访问的位置,所以有可能有其他东西撞击你的exe,从而破坏了安全性。

        5
  •  0
  •   RandomNickName42    16 年前

    你可能可以利用 AppLocker . 它可能只适用于Win7,尽管我不再运行Vista了。;)