-1

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

我的要求是:

  1. 创建一个新的网站和应用程序池
  2. 创建新的应用程序池时,需要设置为 .Net 4,经典模式,用户可选择用户帐户来运行应用程序池
  3. 将 Web 服务安装到C:\Program Files\<comapany name>\Services文件夹下的自定义路径以符合公司标准
  4. 创建一个 SQL 数据库,将登录和 db_datawriter 角色添加到为应用程序池选择的帐户
  5. 运行 SQL 语句建立初始数据库

通过自定义操作创建 SQL 数据库和登录(4 和 5)似乎是可能的,因为我将在安装时运行我的代码。但是默认情况下,Web 设置项目只允许用户从现有网站和应用程序池(1 和 2)中进行选择,并且似乎不允许我自定义此过程,除非添加图像,这也意味着使用选定的网站。

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

任何人都可以建议我创建上述安装程序的最佳方法,因为我认为 Web 设置项目不适合现阶段的目的,但不希望浪费一天时间学习 WIX 或 NSIS。

4

2 回答 2

-1

1 & 3)创建新的应用程序池是不可能的,因为无法在 Web 设置项目中运行自定义代码预安装,在我的情况下,用户可以在其中创建网站/应用程序池安装前的 IIS。Microsoft.Web.Administration.dll如果需要,您可以通过(从这里得到想法)修改现有站点的虚拟目录,方法是传递[TARGETSITE]给 CustomActionData,这样您就可以找到Application修改虚拟目录所需的对象。

2)这是通过引用Microsoft.Web.Administration.dll从这里得到想法)并使用它来更改应用程序池属性来实现的,您需要通过添加/AppPool="[TARGETAPPPOOL]"到 CustomActionData 的 CustomAction 将 appPool 名称传递给 Custom 操作。

仅供参考 - 您可以传递给 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 SERVICENT AUTHORITY\ANONYMOUS,但可以使用 IIS 创建的虚拟用户帐户IIS APPPOOL\<app pool name>

于 2013-10-04T14:38:27.203 回答
-2

如果您需要开发复杂的安装程序,但不想花一天时间学习安装程序技术,那么您最好的选择可能是聘请顾问为您完成。

于 2013-10-04T13:28:43.663 回答