使用单击一次发布已安装的Windows应用程序

时间:2016-08-12 07:55:28

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

我们有一个由*.msi文件安装的Windows应用程序(假设是MyApp),我们需要在发布新版本时更新它。我们想做什么:

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

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

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

那么,在那种情况下我们怎么做呢?我想我们在Visual Studio 2015中创建了一个Windows Form项目,但对后续步骤并不了解。任何肝脏将不胜感激。

1 个答案:

答案 0 :(得分:0)

更新答案:

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

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

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

  

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

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

  

int latest = Int32.Parse(latest_string);

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

  

if(Properties.Settings.Default.version< latest){
//更新可用
}否则{
//午餐程序并跳过更新
}

如果更新可用,我们希望下载存档将其解压缩到午餐位置执行程序< /强>

下载(C#exapmle):

  

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

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

  

string dir = Environment.CurrentDirectory +&#34; MyApp&#34 ;;
if if(Directory.Exists(path)){
Directory.Delete(dir,true);

ZipFile.ExtractToDirectory(&#34; Update.zip&#34;,dir);

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

  

Properties.Settings.Default.version =&#34; latest&#34 ;;
Properties.Settings.Default.Save();

启动流程(C#示例):

  

处理myProcess = new Process();
myProcess.StartInfo.FileName =&#34; dir +&#34; run.exe&#34 ;;
myProcess.Start();

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

  

Environment.Exit(0);

我尽力解释这一点,我希望,我帮助了你。我今年15岁,英语不是我的第一语言,对于anwser的错误感到抱歉。