WPF Clickonce从阶段到生产的部署升级

时间:2013-11-05 07:26:40

标签: wpf clickonce

我有一个WPF应用程序,实际上使用Web服务器下载应用程序并在客户端上执行...当我在新功能发布后立即发布该应用程序时,我还为该应用程序创建了一个临时环境添加/错误修复。

我没有找到一种合理的方式从登台升级到生产,因为app.config被哈希...所以我无法改变我的点(DB / Services)编辑它......

我的实际方式是发布暂存,增加1发布版本和发布生产...但这非常令人沮丧....因为我要做两次工作......任何sugeestion?

由于

1 个答案:

答案 0 :(得分:1)

我们的团队在一年前遇到了同样的情况。我们按照以下步骤解决了这个问题:

  • 确定最新的ClickOnce应用程序版本;
  • 删除* .deploy扩展名;
  • 进行必要的* .config文件更改;
  • 使用“Mage.exe”和您的证书更新清单文件(* .manifest)(另请参阅:MSDN);
  • 再次使用“Mage.exe”更新应用程序版本目录和根目录中的部署清单(* .application);
  • 添加* .deploy扩展名。

这里有一个用于调用Mage的简短代码示例,但实际上并不复杂。

// Compose the arguments to start the Mage tool.
string arguments = string.Format(
@"-update ""{0}"" -appmanifest ""{1}"" -certfile ""{2}""",
deploymentManifestFile.FullName,
applicationManifestFile.FullName,
_certificateFile);

// Add password to the list of arguments if necessary.
arguments += !string.IsNullOrEmpty(_certificateFilePassword) ? string.Format(" -pwd {0}", _certificateFilePassword) : null;

// Start the Mage process and wait it out.
ProcessStartInfo startInfo = new ProcessStartInfo(_mageToolPath, arguments);
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
Process mageProcess = Process.Start(startInfo);
mageProcess.WaitForExit();

// Show all output of the Mage tool to the current console.
string output = mageProcess.StandardOutput.ReadToEnd();

// Determine the update of the manifest was a success.
bool isSuccesfullyConfigured = output.ToLower().Contains("successfully signed");