Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何更改Visual Studio生成的MSI中.InstallState文件的位置_.net_Visual Studio_Installation - Fatal编程技术网

.net 如何更改Visual Studio生成的MSI中.InstallState文件的位置

.net 如何更改Visual Studio生成的MSI中.InstallState文件的位置,.net,visual-studio,installation,.net,Visual Studio,Installation,我有一个使用VisualStudio安装项目创建的MSI文件。已安装的将在应用程序目录中生成.InstallState文件。是否有办法在其他位置而不是默认位置生成此文件?您需要设置InstallStateDir的值。 您需要覆盖提交/安装/回滚/卸载并设置InstallStateDir的值(即上下文[“InstallStateDir”]=@“c:\mydir”) . 通过在命令行中指定/InstallStateDir=“c:\myfolder”(请参见KB946503),也可以实现这一点。但

我有一个使用VisualStudio安装项目创建的MSI文件。已安装的将在应用程序目录中生成.InstallState文件。是否有办法在其他位置而不是默认位置生成此文件?

您需要设置InstallStateDir的值。
您需要覆盖提交/安装/回滚/卸载并设置InstallStateDir的值(即上下文[“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
可以修改上下文之前加载的,因此在Microsoft修复上述
AssemblyInstaller.GetInstallStatePath
方法之前,这不是可行的解决方案