制作和发布ClickOnce程序

因客户的要求,要把Web服务器上的Excel文件导出到客户机上,但客户又不想自己选保存路径:(,于是只好做了一个ClickOnce程序,发布到Web服务器上,在客户导出文件时,将文件保存到客户机上的默认位置(当然这个位置是写死在程序里的),以达到用户不用选择保存路径的目的。

制做起来很简单,一个简单的WinForm程序,界面上有几个Lable用来向用户提示文件保存在哪个文件夹下以及文件的名称,一个Button,用来关闭WinForm窗体。以下为原码:

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.IO;
using  System.Net;
using  System.Collections.Specialized;
using  System.Deployment.Application;
using  System.Web;

namespace  GZDownload
{
    
public partial class GZDownload : Form
    
{
        
public GZDownload()
        
{
            InitializeComponent();
            
try
            
{
                NameValueCollection nameValueTable 
= GetQueryStringParameters();
                
string fielName = nameValueTable.Get("fileName");
                
string uri = nameValueTable.Get("uri");
                
string dir = nameValueTable.Get("dir");
                
string path = @"D:" + dir;
                
string outName = nameValueTable.Get("outName");
                System.IO.Directory.CreateDirectory(path);

                WebClient myWebClient 
= new WebClient();
                myWebClient.DownloadFile(uri 
+ fielName, path + @"" + outName);
                
this.lbl_dirvalue.Text = path;
                
this.lbl_file.Text = outName;
            }

            
catch
            
{
                
this.lbl_message.Text = "下载时发生不可预知错误!";
            }

        }


        
/// <summary>
        
/// 取得参数集合
        
/// </summary>
        
/// <returns>参数集合</returns>

        private NameValueCollection GetQueryStringParameters()
        
{
            NameValueCollection nameValueTable 
= new NameValueCollection();

            
if (ApplicationDeployment.IsNetworkDeployed)
            
{
                
string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
                nameValueTable 
= HttpUtility.ParseQueryString(queryString);
            }

            
return (nameValueTable);
        }


        
private void btn_ok_Click(object sender, EventArgs e)
        
{
            
this.Close();
        }

    }

}

这里有一点值得注意,通过URL传递参数时,用到了

string  queryString  =  ApplicationDeployment.CurrentDeployment.ActivationUri.Query;

以获取当前页面传递过来的带参数的URL,如果在布署没有进行正确的设置,那么这名代码得到的结果会为空值。为了使这段代码能正确的传递我们要的各参数,则需要:项目属性--发布--选项,将允许给应用程序传递URL参数选上(默认为不选)。

OK,现在参数就能正确传递了,工作到这里也就基本结束。

你可能感兴趣的:(String,url,Path,web服务,button,WinForm)