Web services 安装web服务时创建新网站

Web services 安装web服务时创建新网站,web-services,iis,installation,windows-installer,setup-project,Web Services,Iis,Installation,Windows Installer,Setup Project,我正在尝试为我的web服务项目添加一个web安装项目,以使最终用户能够更轻松地进行相当复杂的安装。但是默认设置阻碍了我,我不知道如何调整它们 我的要求是: 创建新网站和应用程序池 创建新应用程序池时,需要设置为.Net 4,经典模式,用户可选择用户帐户以运行应用程序池 将web服务安装到C:\Program Files\\Services文件夹下的自定义路径,以符合公司标准 创建一个SQL数据库,向为应用程序池选择的帐户添加登录名&db_datawriter角色 运行SQL语句以构建初始数据库

我正在尝试为我的web服务项目添加一个web安装项目,以使最终用户能够更轻松地进行相当复杂的安装。但是默认设置阻碍了我,我不知道如何调整它们

我的要求是:

  • 创建新网站和应用程序池
  • 创建新应用程序池时,需要设置为.Net 4,经典模式,用户可选择用户帐户以运行应用程序池
  • 将web服务安装到
    C:\Program Files\\Services
    文件夹下的自定义路径,以符合公司标准
  • 创建一个SQL数据库,向为应用程序池选择的帐户添加登录名&db_datawriter角色
  • 运行SQL语句以构建初始数据库
  • 通过自定义操作创建SQL数据库和登录(4和5)似乎是可能的,因为我将在安装时运行代码。但是默认情况下,web设置项目只允许用户从现有网站和应用程序池(1和2)中进行选择,并且除了添加图像外,似乎不允许我自定义此过程,这也意味着使用所选网站的物理路径

    一个选项是在安装之前创建一个合适的网站和应用程序池,如果没有使用,则将其删除,然后用户只需选择我为他们创建的网站/应用程序池(不理想,但..)但是我没有安装前的步骤来附加这样的自定义代码,我也不知道如何以编程方式可靠地与IIS接口


    有谁能为我推荐创建上述安装程序的最佳方法,因为我认为web安装项目不适合现阶段的用途,但是我不想浪费一天的时间来学习WIX或NSIS。

    如果你需要开发一个复杂的安装程序,但又不想花一天的时间来学习安装程序技术,那么你最好的选择可能是雇佣一位顾问来帮你做。

    1和3)创建一个新的应用程序池是不可能的,因为没有办法在web安装项目中运行自定义代码预安装,在我的例子中,用户可以在安装之前在IIS中创建网站/应用程序池。如果需要,您可以通过
    Microsoft.Web.Administration.dll
    ()修改现有站点的虚拟目录,方法是将
    [TARGETSITE]
    传递给CustomActionData,以便找到修改虚拟目录所需的
    应用程序
    对象

    2)这是通过引用
    Microsoft.Web.Administration.dll
    ()并使用它来更改应用程序池属性来实现的,您需要通过向CustomAction的CustomActionData添加
    /appPool=“[TARGETAPPPOOL]”来将appPool名称传递给自定义操作

    仅供参考-您可以传递给CustomActionData的可用属性不完整(例如,不包括[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
    NT AUTHORITY\ANONYMOUS
    ,但是可能会使用IIS创建的虚拟用户帐户
    IIS APPPOOL\

    我是顾问:S-我已经超过预算使用了1/2天,我最大的问题是找到相关参数(对于我来说APPPOOL name-[TARGETAPPPOOL])传递到CustomActionData属性,以便我可以与它交互。当我咳嗽时,我会发布真正的答案,但是CustomActionData的文档记录非常糟糕,链接中有一个参数列表,但它是一个不完整的列表,因此我必须通过反复试验找到TARGETAPPPOOL,并放弃添加新应用程序池/网站的要求,原因我将在稍后解释CusotmActionData文档记录不完整,你只是从来没有读过。延迟执行自定义操作可以运行,因此Microsoft创建了一个安全模型来防止安全泄漏。CAD属性仅仅是从脚本生成到脚本执行阶段传递的数据,由您决定需要传递多少数据以及如何构造数据。FWIW我可以在几个小时内编写和测试这个安装程序。但是我花了好几年的时间才学会这么快就完成的技能。如果你想[-1]我,请发表评论,这样我就有机会回来了!(或者可能了解一些关于我错误使用本网站的情况)这不是一个广泛的问题,我有一些具体的要求,我希望在不改变技术的情况下实现(即:如类似帖子所建议的那样,到WiX或NSIS).你有5个问题,你说它不宽泛吗?有了如此糟糕的解决方案,微软在VS2012中将这种项目类型踢到了一边应该是显而易见的。使用WiX或InstallShield,您可以在不编写任何自定义操作或要求最终用户执行手动步骤的情况下完成所有这些操作。如果我冒犯了您,我很抱歉,我非常明确地表示不想更改为WiX、NSIS或InstallShield,因为我浪费了太多时间。你能就我如何改进我的答案/解决方案提供一些指导吗?