1

我们的工作团队编写了一个包装应用程序/接口,以使用 msiexec 静默安装一系列 msi。

我的问题与安装针对 IIS 的 msi 有关。

我不断收到以下错误

错误 1314。指定的路径“默认网站/ROOT/someVirtual”不可用。Internet Information Server 可能未运行或路径存在并被重定向到另一台机器。请在 Internet 服务管理器中检查此虚拟目录的状态。

使用以下参数设置执行 msi,如下所示

msiexec.exe /i "D:\SOME.msi" UseShellExecute="false" TARGETSITE="Default Web Site" TARGETVDIR="someVirtual" TARGETAPPPOOL="DefaultAppPool" /qn /l* D:\SOME_log.txt

我意识到这个问题与 IIS 密切相关,因为我可能缺少一些我需要设置的设置/选项。

据我所见,我的虚拟位于此位置"NT4334RB\Sites\Default Web Site\someVirtual",所以我最好的猜测是"Default Web Site / ROOT / someVirtual" - ROOT 是问题,需要设置,但是为了什么?如何?

我刚刚在日志文件中遇到了这一行 - 我认为这可能有用吗?

从 URL 键“TARGETURL”获取 AppRoot

4

1 回答 1

0

似乎我的问题与我没有正确指定元数据库路径有关。我最终在我的代码中添加了一个帮助程序,就像这样。

在 SO 上找到了各种解决方案(让我想到了正确的方向),并且我还安装了一个名为IIS Metabase Explorer的东西,它非常有用

//Added for reference purposes
//HasRequiredOption("site|s=", "The site location", c =>
//AddOrUpdateAdditionalMsiProperty("TARGETSITE", BuildMetabasePath(c)));

//apppool => TARGETAPPPOOL
//virtualdir => TARGETVDIR

/// <summary>
/// Builds the meta-base path.
/// </summary>
/// <param name="websiteName">Name of the website.</param>
/// <returns>The fully constructed meta-base path</returns>
private string BuildMetabasePath(string websiteName)
{
    return "/LM/W3SVC/" + this.GetWebSiteId(websiteName);
}

/// <summary>
/// Gets the web site id.
/// </summary>
/// <param name="websiteName">Name of the website.</param>
/// <param name="serverName">Name of the server. Defaults to: localhost if none specified</param>
/// <returns>The website id</returns>
private string GetWebSiteId(string websiteName, string serverName = "localhost")
{
    using (var entries = new DirectoryEntry(string.Format("IIS://{0}/w3svc", serverName)))
    {
        var children = entries.Children.Cast<DirectoryEntry>();
        var sites =
           (from de in children
             where
             de.SchemaClassName == "IIsWebServer" &&
             de.Properties["ServerComment"].Value.ToString() == websiteName
             select de).ToList();

       if (sites.Any())
       {
          return sites.First().Name;
       }
   }

  return "-1";
}
于 2012-10-15T15:11:40.990 回答