如何在Web安装项目中创建新的应用程序池?
我需要部署我的Web服务。 它需要使用自己的凭据在IIS中的单独应用程序池中运行。
是否可以通过在VS 2008中使用Web安装项目来实现此目的?
默认情况下,我似乎只能选择现有的应用程序池。
我以前一直在这条路上,不幸的是你需要手动创建应用程序池或编写自定义操作来为你管理。
在下面的评论中继续Grzenio的问题:
“你能给我一个提示,从哪里开始寻找代码/帮助程序类?你是否将项目保持为Web安装项目,或者只使用标准的应用程序安装项目?”
我在包含安装项目的解决方案中添加了一个名为InstallHelper
的新项目。 在那个项目中,我创建了一个名为InstallActions
的类,它来自:
System.Configuration.Install.Installer
(MSDN) 。
您可以在Installer
基类上覆盖四种方法,以允许您根据安装程序运行时是处于“安装”,“提交”,“卸载”还是“回滚”阶段来指定自定义操作。
我还在安装项目用户界面中添加了许多文本框对话框。 从这些对话中捕获的输入和状态将通过字典传递到您的自定义安装操作。 即:
using System.Collections.Specialized; using System.ComponentModel; using System.Configuration.Install; using System.Windows.Forms; namespace InstallHelper { [RunInstaller(true)] public partial class PostInstallActions : Installer { public override void Install(IDictionary state) { base.Install(state); // Do my custom install actions } public override void Commit(IDictionary state) { base.Commit(state); // Do my custom commit actions } public override void Uninstall(IDictionary state) { base.Uninstall(state); // Do my custom uninstall actions } public override void Rollback(IDictionary state) { base.Uninstall(state); // Do my custom rollback actions } } }
要将自定义操作项目添加到安装项目,请打开“自定义操作”查看器/编辑器并指定InstallHelper
项目的输出。
这是基础,应该让你开始。 Web Setup Project还支持自定义操作和其他用户输入对话框,因此除了自定义操作之外,您可能还希望重新使用现有项目。
看看这篇文章http://forums.iis.net/t/1061734.aspx ,它会给出一些关于Microsoft.Web.Administration dll的粗略概念。
我还没有研究过整个概念,但我想到了如何创建新池以及如何附加新的网站/虚拟目录。
创建应用程序池
Microsoft.Web.Administration.ServerManager manager = new Microsoft.Web.Administration.ServerManager(); manager.ApplicationPools.Add("NewApplicationPool"); manager.CommitChanges();
使用现有虚拟目录进行附加
Microsoft.Web.Administration.ServerManager manager = new Microsoft.Web.Administration.ServerManager(); Site defaultSite = manager.Sites["Default Web Site"]; // defaultSite.Applications will give you the list of 'this' web site reference and all // virtual directories inside it -- 0 index is web site itself. Microsoft.Web.Administration.Application oVDir = defaultSite.Applications["/myApp"]; oVDir.ApplicationPoolName = "NewApplicationPool"; manager.CommitChanges();
这样,您可以使用自定义操作将应用程序池分配给新网站,从而覆盖安装程序类的提交方法。
如果仍然发现自己挣扎,请告诉我,我会尝试发送代码。
关心Faiyaz faiyazkhan@hotmail.com