当前位置: 首页 > 编程语言 > C#

接收“Install”方法中使用的参数的Installer类分享

时间:2023-04-10 18:40:54 C#

接收“Install”方法中使用的参数的Installer类.它看起来像这样:[RunInstaller(true)]publicclassHostInstaller:Installer{privateconststring_serviceName="Myservicename";私有ServiceProcessInstaller_process;私人服务安装程序_服务;publicHostInstaller(){_process=newServiceProcessInstaller();_process.Account=ServiceAccount.User;_process.Username="我的用户名";//硬编码_process.Password="我的密码";//硬编码_service=newServiceInstaller();_service.ServiceName=_serviceName;="我的服务说明";_service.StartType=ServiceStartMode.Automatic;Installers.Add(_process);安装程序。添加(_服务);我使用InstallUtil.exe实用程序安装和卸载此服务,一切正常。然后我必须接收用户名和密码作为参数(而不是硬编码),所以我更改了类并覆盖了“安装”方法,并从构造函数中移动了上述代码部分。publicoverridevoidInstall(System.Collections.IDictionarystateSaver){stringuserName=this.Context.Parameters["UserName"];if(userName==null){thrownewInstallException("缺少参数'UserName'");}stringpassword=this.Context.Parameters["密码"];if(password==null){thrownewInstallException("缺少参数'Password'");}_process=newServiceProcessInstaller();_process.Account=ServiceAccount.User;_process.Username=用户名;_process.Password=密码;_service=newServiceInstaller();_service.ServiceName=_serviceName;_service.Description="我的服务描述";_service.StartType=ServiceStartMode.Automatic;Installers.Add(_process);安装程序。添加(_服务);base.Install(stateSaver);现在我再次安装该服务使用:InstallUtil.exe/UserName=UserName/Password=UserPassword路径...使用所需的用户名和密码,该服务的安装效果很好。但是,我现在无法卸载该服务。我正在使用InstallUtil.exe/u,但该服务仍然存在。我在这里读到的一个有用提示:如果您需要在Install方法中将安装程序实例添加到Installers集合,请确保在Uninstall方法中对集合执行相同的添加操作。但是,如果您将安装程序实例添加到自定义安装程序的类构造函数中的安装程序集合,则可以避免在这两种方法中维护该集合。我真的不明白什么可以解决这个问题。任何帮助将不胜感激。Elad*解决方案*这是我找到的解决方案,确实根据我上面显示的链接:在Uninstall()方法中,我在Install()方法中做完全相同的事情(除了订阅AfterInstall事件),然后调用base.Uninstall()方法。该方法如下所示:publicoverridevoidUninstall(System.Collections.IDictionarystateSaver){stringuserName=this.Context.Parameters["UserName"];if(userName==null){thrownewInstallException("缺少参数'UserName'");}stringpassword=this.Context.Parameters["密码"];if(password==null){thrownewInstallException("缺少参数'Password'");}_process=newServiceProcessInstaller();_过程。账户=ServiceAccount.User;_process.Username=用户名;_process.Password=密码;_service=newServiceInstaller();_service.ServiceName=_serviceName;_service.Description="我的服务描述";.Add(_process);安装程序。添加(_服务);base.Uninstall(stateSaver);}当然,这两个方法的公共代码应该包含在一个私有方法中。现在,为了卸载该服务,您应该使用您的用户名和密码调用InstallUtil.exe,如下所示:InstallUtil.exe/u/UserName=UserName/Password=UserPasswordPath...类中的Install方法,一定要在派生方法中先调用基类的Install方法。你在最后调用base.Install(...)。如文档所述,在执行任何其他工作之前尝试调用它,看看是否可以缓解您的问题。以上就是C#学习教程:接收“Install”方法中使用的参数的Installer类分享的全部内容。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: