我们可以在自己的服务程序或者企业服务程序中,编写自定义安装类(从System.Configuration.Install.Installer 类中派生)。
然后我们就可以用InstallUtil.exe 或者 InstallUtil.exe /u 来安装或者卸载这个组件。我们重载System.Configuration.Install.Installer 类的Install和Uninstall方法,
public override void Install(IDictionary stateSaver)
public override void Uninstall(IDictionary savedState)
并且在这些方法中借用RegistrationHelper 、RegistrationConfig 等配置类,就可以让我们组件实现很多丰富的安装功能。
比如如果是企业服务,安装的时候,自动把组件所在目录设置成ApplicationRootDirectory。
又比如把一些相关组件放到GAC中等等。
不过我们在卸载的时候,有可能会碰到类似下面的异常:
试图在 User.EnterpriseServices.dll 程序集中查找安装程序时发生异常。
System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有
关更多信息,请检索 LoaderExceptions 属性。
正在中止安装 User.EnterpriseServices.dll。
在卸载 System.Configuration.Install.AssemblyInstaller 安装程序的过程中发生异常。
System.InvalidOperationException: 无法获得 User.EnterpriseServices.dll 程序集中的安装程序类型。
引发了内部异常 System.Reflection.ReflectionTypeLoadException,错误信息如下: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
在卸载的过程中发生异常。将忽略该异常并继续卸载。但是,在卸载完成之后应用程序可能未完全卸载。
这时候一般产生的原因是你在自己配置的安装或者卸载的时候得顺序有问题。比如一些企业服务组件要加载的一些组件被你先从GAC中卸载了,就可能会导致这个异常,只要改变一下卸载或者安装的顺序,则就可以避免这个错误发生。