C# - ClickOnce - 애플리케이션 실행시 파라미터 값 전달하기(쿼리스트링 전달)

반응형

 

클릭원스 쿼리스트링 값을 받기 위한 설정

  • 솔루션 탐색기에서 프로젝트 우클릭 - 속성

 

  • 게시 - 옵션

 

  • 매니페스트 - 애플리케이션으로 URL 매개 변수가 전달되도록 허용


쿼리스트링의 데이터를 받기 위한 코드 설계

Program.cs

  • 솔루션 탐색기에서 Program.cs 파일 열기
  • 아래의 코드를 Program 클래스 안에 붙여넣기
 private static Dictionary<string, string> GetQueryStringParameters()
{
    Dictionary<string, string> contentsData = new Dictionary<string, string>();
    try
    {
        if (ApplicationDeployment.IsNetworkDeployed)
        {
            string url = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0];
            string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
            if (string.Empty == queryString) return (contentsData);

            int nIndex = queryString.IndexOf("?");

            if (nIndex > -1) queryString = queryString.Remove(nIndex, 1);
            queryString = Uri.UnescapeDataString(queryString);
            string[] dataPairs = queryString.Split('&');
            if (dataPairs != null && dataPairs.Length > 0)
            {
                foreach (string pair in dataPairs)
                {
                    string[] vars = pair.Split('=');
                    if (!contentsData.ContainsKey(vars[0]))
                    {
                        contentsData.Add(vars[0], vars[1]);
                    }
                }
            }
        }
    }
    catch (Exception)
    {
    }

    return (contentsData);
}

 

(Program.cs 전체 소스 코드)

더보기
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Deployment.Application;
using System.Windows.Forms;

namespace hwp
{
    static class Program
    {
        /// <summary>
        /// 해당 애플리케이션의 주 진입점입니다.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());            
        }

        public static Dictionary<string, string> GetQueryStringParameters()
        {
            Dictionary<string, string> contentsData = new Dictionary<string, string>();
            try
            {
                if (ApplicationDeployment.IsNetworkDeployed)
                {
                    string url = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0];
                    string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
                    if (string.Empty == queryString) return (contentsData);

                    int nIndex = queryString.IndexOf("?");

                    if (nIndex > -1) queryString = queryString.Remove(nIndex, 1);
                    queryString = Uri.UnescapeDataString(queryString);
                    string[] dataPairs = queryString.Split('&');
                    if (dataPairs != null && dataPairs.Length > 0)
                    {
                        foreach (string pair in dataPairs)
                        {
                            string[] vars = pair.Split('=');
                            if (!contentsData.ContainsKey(vars[0]))
                            {
                                contentsData.Add(vars[0], vars[1]);
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
            }

            return (contentsData);
        }
    }


}

Form1.cs : C# 애플리케이션에서 데이터 호출

  • Form1.cs 파일 열기
  • 매개변수의 값을 전달 받을 변수 선언 (dicParams)
  • 쿼리스트링의 키 확인 (ContainsKey)
  • 키가 있으면 해당 키의 값 호출
public partial class Form1 : Form
{
    public Form1()
    {
		InitializeComponent();
        
        // 클릭원스 파라미터 데이터 확인
        Dictionary<string, string> dicParams = Program.GetQueryStringParameters();
        // 쿼리스트링으로 전달한 키 입력
        if (dicParams.ContainsKey("data"))
            MessageBox.Show(string.Format("data is {0}", dicParams["data"]));
    }
}

쿼리스트링으로 데이터 넘겨주기 (JavaScript)

  • 버튼을 누르면 클릭원스 프로그램이 실행되고 파라미터를 넘겨주기 위한 html 문서 작성
<script>
    function getParameter(data) {
        const baseUrl = '클릭원스 배포 url';
        const appName = '애플리케이션 이름.application';
        // 쿼리 스트링
        const queryString = '?data=' + data;
        // 형식 : www~/app1.application?query=value
        const link = baseUrl + appName + queryString;
        // 클릭시 클릭원스에 파라미터와 함께 앱 실행
        window.open(link, '_blank');
    }
</script>

<input type="button" onclick="getParameter('HelloWorld')" value="파라미터 값 전달하기">

 

  • 버튼 클릭
    • 클릭시 'HelloWorld' 문자열 데이터 윈폼 앱으로 전달

 

  • 클릭원스 업데이트 확인

 

  • 쿼리 스트링(URL 파라미터) 값 전달 확인


참고

티스토리 우하하 개발블로그님 - Clickonce 배포에서 프로그램 실행시 파라미터 전달하는 방법

반응형