【问题标题】:Publishing an installed windows application using click once使用单击一次发布已安装的 Windows 应用程序
【发布时间】:2016-08-12 07:55:28
【问题描述】:

我们有一个通过*.msi 文件安装的Windows 应用程序(比如说MyApp),我们需要在发布新版本时对其进行更新。我们希望这样做:

1) 我们使用安装文件将新版本的程序安装到服务器位置。

2) 我们将安装的文件从 C:\Program Files (x86)\MyApp 复制到服务器上的共享文件夹(比如 MyServer\C:\MyApp)。

3) 我们创建了一个click once 应用程序,并希望让我们的用户提供一个链接,以便他们可以从发布的位置(MyServer\C:\MyApp)单击一次来安装和更新他们的程序(MyApp)。

那么,在这种情况下,我们该怎么做呢?我想我们在 Visual Studio 2015 中创建了一个Windows Form 项目,但对接下来的步骤一无所知。任何帮助将不胜感激。

【问题讨论】:

  • 对这个问题有什么想法吗???

标签: c# asp.net deployment clickonce setup-deployment


【解决方案1】:

更新答案:

所以你的文件在你的服务器上。当发生实际更新时,您需要将所有文件下载到用户计算机上的安装目录。为简化此操作,请从这些文件创建一个存档 (.zip)。 我们还需要一个包含已归档应用程序版本号的文件。 所以创建一个简单的文本文件 (.txt)文件的内容只能是版本号(例如:1000)。此文件中的版本号不能为负数或 0。当您要更新时创建一个新的存档 (.zip) 文件并增加文本文件中的版本号

现在魔术开始了。 创建一个 Visual Studio Windows 窗体应用程序。此应用程序在执行时将检查更新,如果需要下载它们,然后运行应用程序(即在服务器上)。为此,我们需要一种方法来判断安装了哪个版本。为此,我们将使用 应用程序设置创建一个名为“版本”的设置,即整数。值必须为 0,表示该应用程序(服务器)以前从未安装过。

当应用程序启动时,我们将下载字符串在“version.txt”中,即在服务器上使用(C#示例):

WebClient 客户端 = new WebClient();
string latest_string = client.DownloadString("MyServer.net/version.txt");

然后将字符串转换为整数,以便我们可以比较它与应用程序设置中存储的版本(C# 示例):

int latest = Int32.Parse(latest_string);

然后我们使用一个简单的 if 语句(C# 示例):

if(Properties.Settings.Default.version //更新可用
}else {
//午餐程序并跳过更新
}

如果更新可用我们要下载存档将其解压缩到午餐位置执行程序。

下载(C# 示例):

使用 (var client = new WebClient(){
client.DownloadFile("MyServer.net/Update.zip", "Update.zip");
}

为了提取我们使用 ZipFile 类 (help link)(C# 示例):

string dir = Environment.CurrentDirectory + "MyApp";
if(Directory.Exists(path)){
Directory.Delete(dir, true);
}
ZipFile.ExtractToDirectory( "Update.zip", 目录);

我们需要更新版本设置,因为应用程序已经更新,我们不想继续下载(C#示例):

Properties.Settings.Default.version = "最新";
Properties.Settings.Default.Save();

启动进程(C#示例):

进程 myProcess = new Process();
myProcess.StartInfo.FileName = "dir + "run.exe";
myProcess.Start();

最后我们关闭应用程序并让应用程序运行(C# 示例):

Environment.Exit(0);


我已尽力解释这一点,希望对您有所帮助。我今年 15 岁,英语不是我的第一语言,对于答案中的错误,我深表歉意。

【讨论】:

  • 感谢您的回复。实际上有 2 个不同的应用程序,第一个(MyApp)是由其他人创建的,没有源代码。我们只有它的安装文件。出于这个原因,我不确定我们是否应该创建安装程序或其他项目类型。我应该创建一个 Windows 应用程序,然后如何将 MyApp 的安装文件集成到新项目中?我真的很困惑:(
  • 如果 MyApp 的安装文件没有写入任何注册表变量(仅将文件复制到文件夹),您可以轻松集成上述答案。如果不创建以某种方式检查更新是否可用的应用程序。如果有可用更新,请下载您尝试安装并运行的应用程序的安装文件。安装文件会自动将旧版本替换为新版本。如果更新不可用,则只需运行该应用程序。
  • 不,没有注册表更改。只会将安装文件复制到共享服务器位置,并且用户可以从该位置进行更新和安装。您能否通过添加步骤来更新您的答案。抱歉,我没有这方面的经验。非常感谢。
  • 更新了答案。
猜你喜欢
  • 1970-01-01
  • 2010-11-21
  • 2022-02-21
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多