c#制作类似qq安装程序一样的单文件程序安装包
c#制作类似qq安装程序一样的单文件程序安装包
发布时间:2017-01-07 来源:查字典编辑
摘要:复制代码代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Compo...

c#制作类似qq安装程序一样的单文件程序安装包1

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Threading;

using System.Xml;

using System.IO;

using System.IO.Compression;

using System.Resources;

using System.Net;

using System.Web.Services.Description;

using System.Diagnostics;

using System.Runtime.InteropServices;

namespace MON.Client

{

public partial class MainForm : Form

{

bool testFlag = false;

Dictionary<string, string> dic;

Thread t;

public MainForm()

{

InitializeComponent();

}

private void MainForm_Load(object sender, EventArgs e)

{

dic = new Dictionary<string, string>();

groupBox1.Visible = true;

groupBox2.Visible = false;

}

/// <summary>

/// 安装路径

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void InstallPathBTN_Click(object sender, EventArgs e)

{

DialogResult dr = FolerBrowserCreator.ShowDialog();

if (DialogResult.OK == dr)

{

InstallPathTB.Text = FolerBrowserCreator.SelectedPath;

if (dic.ContainsKey("installPath"))

{

dic["installPath"] = InstallPathTB.Text;

}

else

{

dic.Add("installPath", InstallPathTB.Text);

}

if (string.IsNullOrEmpty(LogInstallPahtTB.Text))

{

LogInstallPahtTB.Text = Path.Combine(InstallPathTB.Text, "log");

if (dic.ContainsKey("logPath"))

{

dic["logPath"] = LogInstallPahtTB.Text;

}

else

{

dic.Add("logPath", LogInstallPahtTB.Text);

}

}

}

}

/// <summary>

/// 日志路径

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void LogPathBrowseBtn_Click(object sender, EventArgs e)

{

DialogResult dr = FolerBrowserCreator.ShowDialog();

if (DialogResult.OK == dr)

{

LogInstallPahtTB.Text = FolerBrowserCreator.SelectedPath;

if (dic.ContainsKey("logPath"))

{

dic["logPath"] = LogInstallPahtTB.Text;

}

else

{

dic.Add("logPath", LogInstallPahtTB.Text);

}

}

}

/// <summary>

/// 测试webservice;

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void testWebServiceBTN_Click(object sender, EventArgs e)

{

testWebServiceBTN.Enabled = false;

TestService();

if (testFlag)

{

MessageBox.Show("测试通过", "系统提示", MessageBoxButtons.OK);

}

else

{

MessageBox.Show("网站地址有误", "系统提示", MessageBoxButtons.OK);

}

testWebServiceBTN.Enabled = true;

}

/// <summary>

/// 测试webservice

/// </summary>

void TestService()

{

WebClient wc = new WebClient();

Stream stream1 = null;

Stream stream2 = null;

try

{

var url = WebSiteTB.Text.Trim().ToUpper();

if (!url.EndsWith("/MON/MONSERVICE.ASMX"))

{

url = url.TrimEnd('/') + "/MON/MONSERVICE.ASMX";

}

if (dic.ContainsKey("webService"))

{

dic["webService"] = url;

}

else

{

dic.Add("webService", url);

}

stream1 = wc.OpenRead(url + "?op=GetMachineConfig");

stream2 = wc.OpenRead(url + "?op=UpdateServerStatus");

if (stream1.CanRead && stream2.CanRead)

{

testFlag = true;

}

}

catch

{

testFlag = false;

}

finally

{

wc.Dispose();

if (stream1 != null)

{

stream1.Close();

}

if (stream2 != null)

{

stream2.Close();

}

}

}

/// <summary>

/// 开始安装

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void StartBtn_Click(object sender, EventArgs e)

{

if (!Directory.Exists(InstallPathTB.Text.Trim()))

{

MessageBox.Show("安装路径有误", "系统提示", MessageBoxButtons.OK);

return;

}

if (LogInstallPahtTB.Text.Trim().StartsWith(InstallPathTB.Text.Trim()))

{

if (!Directory.Exists(LogInstallPahtTB.Text.Trim()))

{

Directory.CreateDirectory(LogInstallPahtTB.Text.Trim());

}

}

else

{

if (!Directory.Exists(LogInstallPahtTB.Text.Trim()))

{

MessageBox.Show("日志路径有误", "系统提示", MessageBoxButtons.OK);

return;

}

}

if (testFlag == false)

{

TestService();//test过就不用再test一次了

}

if (testFlag == false)

{

MessageBox.Show("网站地址有误", "系统提示", MessageBoxButtons.OK);

return;

}

try

{

int days = Convert.ToInt32(DaysTB.Text.Trim());

if (days < 1)

{

throw new Exception();

}

}

catch

{

MessageBox.Show("日志保存天数有误", "系统提示", MessageBoxButtons.OK);

return;

}

dic.Add("logDays", DaysTB.Text.Trim());

groupBox1.Visible = false;

groupBox2.Visible = true;

InstallInfoTB.Text = "开始安装";

t = new Thread(new ThreadStart(InstallJob));

t.Start();

}

/// <summary>

/// 安装线程

/// </summary>

void InstallJob()

{

WriteLine("准备安装环境...");

var configPath = Path.Combine(dic["installPath"], "MON.WS.exe.config");

var exePath = configPath.TrimEnd(".config".ToCharArray());

var args = new List<string>();

args.Add(@"net stop 服务器性能监控UTRY");

args.Add(@"%SystemRoot%Microsoft.NETFrameworkv2.0.50727InstallUtil.exe /u " + exePath);

args.Add("exit");

if (!cmdCommand(args))

{

WriteLine("在卸载原有服务时出现异常");

WriteLine("安装失败");

return;

}

WriteLine("释放配置文件...");

if (!releaseConfig(dic, configPath))

{

WriteLine("释放配置文件过程中出现异常");

WriteLine("安装失败");

return;

}

WriteLine("配置文件释放完毕...");

WriteLine("释放可执行文件...");

if (!releaseExe(exePath))

{

WriteLine("释放可执行文件时出现异常");

WriteLine("安装失败");

return;

}

WriteLine("可执行文件释放完毕...");

WriteLine("开始安装服务...");

args.Clear();

args.Add(@"%SystemRoot%Microsoft.NETFrameworkv2.0.50727InstallUtil.exe " + exePath);

args.Add(@"net start 服务器性能监控UTRY");

args.Add("exit");

if (!cmdCommand(args))

{

WriteLine("在安装和启动服务时出现异常");

WriteLine("安装失败");

return;

}

WriteLine("服务安装成功");

WriteLine("安装成功");

}

/// <summary>

/// 释放exe

/// </summary>

/// <param name="exePath"></param>

bool releaseExe(string exePath)

{

try

{

var data = Properties.Resources.MON_WS;

if (File.Exists(exePath))

{

File.Delete(exePath);

}

var f = new FileStream(exePath, FileMode.Create);

f.Write(data, 0, data.Length);

f.Close();

return true;

}

catch

{

return false;

}

}

/// <summary>

/// 释放Config

/// </summary>

/// <param name="dic"></param>

/// <param name="configPath"></param>

bool releaseConfig(Dictionary<string, string> dic, string configPath)

{

try

{

var configStr = Properties.Resources.MON_WS_exe;

WriteLine("配置相关信息...");

configStr = configStr.Replace("#WebServiceUrl#", dic["webService"]);

configStr = configStr.Replace("#LogSavePath#", dic["logPath"]);

configStr = configStr.Replace("#LogSaveDays#", dic["logDays"]);

if (File.Exists(configPath))

{

File.Delete(configPath);

}

StreamWriter sw = File.AppendText(configPath);

sw.Write(configStr);

sw.Flush();

sw.Close();

return true;

}

catch

{

return false;

}

}

/// <summary>

/// 执行CMD命令

/// </summary>

/// <param name="args"></param>

bool cmdCommand(List<string> args)

{

try

{

var process = new Process();

process.StartInfo.FileName = "cmd";

process.StartInfo.UseShellExecute = false;

process.StartInfo.RedirectStandardInput = true;

process.StartInfo.RedirectStandardOutput = true;

process.StartInfo.CreateNoWindow = true;

process.Start();

foreach (var arg in args)

{

process.StandardInput.WriteLine(arg);

}

process.WaitForExit();

//var result = process.StandardOutput.ReadToEnd();

process.Close();

return true;

}

catch

{

return false;

}

}

delegate void mydele(string text);

/// <summary>

/// 更新安装信息

/// </summary>

/// <param name="text"></param>

void WriteLine(string text)

{

if (InstallInfoTB.InvokeRequired)

{

mydele dd = new mydele(WriteLine);

InstallInfoTB.BeginInvoke(dd, new object[] { text });

}

else

{

InstallInfoTB.Text = InstallInfoTB.Text + Environment.NewLine + text;

if (text == "安装成功"||text == "安装失败")

{

CompleteBTN.Enabled = true;

}

}

}

/// <summary>

/// 取消

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void CancelBTN_Click(object sender, EventArgs e)

{

this.Close();

}

/// <summary>

/// 完成

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void CompleteBTN_Click(object sender, EventArgs e)

{

if (t != null)

{

t.Abort();

t.Join();

}

this.Close();

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类