【发布时间】:2008-11-06 15:15:15
【问题描述】:
我有一个使用 Visual Studio 安装项目创建的 MSI 文件。安装程序会在应用程序目录中生成一个 .InstallState 文件。有没有办法让这个文件在不同的位置而不是默认位置生成?
【问题讨论】:
标签: .net visual-studio installation
我有一个使用 Visual Studio 安装项目创建的 MSI 文件。安装程序会在应用程序目录中生成一个 .InstallState 文件。有没有办法让这个文件在不同的位置而不是默认位置生成?
【问题讨论】:
标签: .net visual-studio installation
您需要设置 InstallStateDir 的值。
您需要覆盖 Commit/Install/Rollback/Uninstall 并设置 InstallStateDir 的值 (I.E. Context["InstallStateDir"] = @"c:\mydir")
.
【讨论】:
这也应该通过在命令行中指定 /InstallStateDir="c:\myfolder" 来工作(参见 KB946503)。但是,InstallContext 正在将所有参数名称转换为小写,这会破坏 AssemblyInstaller 中的以下代码,期望找到混合大小写的参数名称:
private string GetInstallStatePath(string assemblyPath)
{
string str2 = base.Context.Parameters["InstallStateDir"];
assemblyPath = Path.ChangeExtension(assemblyPath, ".InstallState");
if (!string.IsNullOrEmpty(str2))
{
return Path.Combine(str2, Path.GetFileName(assemblyPath));
}
return assemblyPath;
}
设置Context["InstallStateDir"] 可能会用于保存状态;但是,由于在Uninstall 可以修改上下文之前加载了状态,因此在微软修复上述AssemblyInstaller.GetInstallStatePath 方法之前,这不是可行的解决方案。
【讨论】: