none
如何编程实现禁止安装软件 RRS feed

  • 问题

  • 现在我需要用VC++编写一个程序,实现的功能是禁止安装任何软件,
    也就是说,这个程序一直在监视着系统,一旦发现有个软件要安装,就停止它。

    有两点需要注意
    1.我的程序如何捕获到“安装软件”这一动作?它怎么能够知道现在有个软件正在安装?
    2.我要禁止的是所有软件(或者尽可能的多),而不是在程序中指定禁止某几个软件。也就是说,能否找到一个共同点,这个共同点就是安装任何一个软件时系统都会做的一个动作。
    3.请不要告诉我停止windows installer服务,因为停止它后只能禁止.msi的安装文件的安装。

    我目前的思路是监视注册表,因为安装软件的时候都会修改注册表,但是这样我总觉得不是最好的办法。
    应该会有更“本质”的办法,从根本上解决问题

    请高手指点,谢谢
    2009年2月17日 5:46

答案

  • 软件安装没有确切的定义,每个软件作者都可以决定要运行软件需要作什么准备工作。如果要禁止所有软件的安装,那么软件需要猜到所有的软件作者心里认为安装是什么意思,而这是不可能的。

    另外,有些软件的安装是必要的,例如操作系统和应用软件的补丁。不安装这些软件的话会有安全性问题。

    在没有一个全球的对“安装”的标准定义的情况下,不可能做到。

    MSMVP VC++
    2009年2月17日 21:41
    版主
  • 你好!
         我感觉怎样监控都不是很完美:
         1,如果你监视注册表的话,有些软件安装的时候根本就不修改注册表!
         2,如果你停止Windows Installer服务,而有些软件也并不使用这个来安装
         3,修改权限也不是很完美,有些软件不需要管理员权限的。
         4,另外.NET应用程序是支持XCopy部署的,只要直接拷贝就可以完成安装,这使上面的办法都失效了。
         以上思路可以选择其一,或是同时采用!
         希望这个解释对你有帮助! 

    周雪峰
    2009年2月20日 5:46
    版主

全部回复

  • 软件安装没有确切的定义,每个软件作者都可以决定要运行软件需要作什么准备工作。如果要禁止所有软件的安装,那么软件需要猜到所有的软件作者心里认为安装是什么意思,而这是不可能的。

    另外,有些软件的安装是必要的,例如操作系统和应用软件的补丁。不安装这些软件的话会有安全性问题。

    在没有一个全球的对“安装”的标准定义的情况下,不可能做到。

    MSMVP VC++
    2009年2月17日 21:41
    版主
  • 比如说禁用Windows Installer服务可以禁止.msi的安装文件,

    有没有类似的办法可以禁止其他的软件安装呢?

    就是说我对系统进行某种设置,达到禁止安装软件的目的。

    而这种设置可以用程序代码来实现。
    2009年2月18日 0:42
  • 如果你真要这么做,是否可以从用户权限方面考虑。
    Microsoft Online Community Support
    2009年2月20日 3:34
  • 你好!
         我感觉怎样监控都不是很完美:
         1,如果你监视注册表的话,有些软件安装的时候根本就不修改注册表!
         2,如果你停止Windows Installer服务,而有些软件也并不使用这个来安装
         3,修改权限也不是很完美,有些软件不需要管理员权限的。
         4,另外.NET应用程序是支持XCopy部署的,只要直接拷贝就可以完成安装,这使上面的办法都失效了。
         以上思路可以选择其一,或是同时采用!
         希望这个解释对你有帮助! 

    周雪峰
    2009年2月20日 5:46
    版主