我们的团队正在编写一个包装器应用程序/界面,使用msiexec静默安装一系列msi。
我的问题与安装针对IIS的msi有关。
我一直收到以下错误
错误1314.指定的路径'Default Web Site / 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网站\ someVirtual”,所以我最好的猜测是“默认网站 / ROOT / someVirtual“ - ROOT是问题,需要设置,但是要做什么?怎么样?
我刚刚在日志文件中遇到过这一行 - 我认为这可能有用吗?
从Url键获取AppRoot'TARGETURL'
答案 0 :(得分:0)
似乎我的问题与我没有正确指定配置数据库路径有关。 我最终在我的代码中添加了一个帮助器。
在SO上发现了各种解决方案(this让我思考正确的方向),&我还安装了一个名为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";
}