我正在尝试为我的Web服务项目添加一个Web安装项目,以便为最终用户提供更复杂的安装。但默认设置正在阻碍我,我不知道如何调整它们。
我的要求是:
C:\Program Files\<comapany name>\Services
文件夹下的自定义路径以符合公司标准通过自定义操作可以创建SQL数据库和登录(4&amp; 5),因为我将在安装时运行我的代码。但默认情况下,Web设置项目仅允许用户从现有网站和应用程序池(1&amp; 2)中进行选择,并且似乎不允许我自定义此过程,除了添加图像,这也意味着物理路径为使用所选网站。
一个选择是创建一个合适的网站&amp;安装之前的应用程序池,如果它未被使用则将其删除,那么用户只需要选择我为他们创建的网站/应用程序池(不理想,但是......)但是没有预安装步骤让我附加这样的自定义代码,我不知道如何可靠地与IIS接口;编程。
任何人都可以建议我最好的方法来创建上面列出的安装程序,因为我认为Web设置项目在这个阶段并不适合用途,但是不想浪费一天学习WIX或NSIS。
答案 0 :(得分:-1)
1&amp; 3)无法创建新的应用程序池,因为无法在Web安装项目中运行自定义代码预安装,在我的情况下,用户可以创建网站/应用程序安装前在IIS中的池。如果需要,您可以通过将Microsoft.Web.Administration.dll
传递给CustomActionData来修改现有网站的虚拟目录[TARGETSITE]
(got the idea from here),以便找到修改所需的Application
对象虚拟目录。
2)这是通过引用Microsoft.Web.Administration.dll
(got the idea from here)并使用它来更改应用程序池属性来实现的,您需要将appPool名称传递给自定义通过将/AppPool="[TARGETAPPPOOL]"
添加到CustomAction的CustomActionData来执行操作。
FYI - 您可以传递给CustomActionData的可用属性为documented here但不完整(例如,不包括[TARGETAPPPOOL]和[TARGETSITE])
我使用此代码修改了应用池:
Microsoft.Web.Administration.ServerManager serverManager = new ServerManager();
var appPoolName = base.Context.Parameters["AppPool"].ToString();
var appPool = serverManager.ApplicationPools.SingleOrDefault( pool => pool.Name == appPoolName );
appPool.ManagedRuntimeVersion = "v4.0";
appPool.ManagedPipelineMode = ManagedPipelineMode.Classic;
serverManager.CommitChanges();
4 - 5)只需从自定义操作中打开SQL连接并运行相关的SQL脚本,您将无法添加真实帐户,即:NT AUTHORITY\NETWORK SERVICE
或{ {1}},但可以使用IIS创建的虚拟用户帐户NT AUTHORITY\ANONYMOUS
。
答案 1 :(得分:-2)
如果你需要开发一个复杂的安装程序,但又不想花一天时间学习安装程序技术,那么最好的办法就是聘请一位顾问为你做这件事。