制作和发布ClickOnce程序

本文介绍了一种使用ClickOnce程序实现在Web服务器上自动导出Excel文件至客户端的方法,并详细展示了如何通过URL传递参数实现文件的自动下载及保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因客户的要求,要把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,现在参数就能正确传递了,工作到这里也就基本结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值