새롭게 프로젝트를 만들고 “Application Folder” 속성에 “DefaultLocation” 정보가 보이게 됩니다. 이곳의 정보를 수정하면은 변경을 할수 있습니다.

// [ProgramFilesFolder] :: 설치할 경로
// [Manufacturer] :: 필수 유지 위에서 설명함.
// [ProductName] :: 설치할 폴더명(프로젝트 이름과 달리 할수 있음)
[ProgramFilesFolder][Manufacturer]\[ProductName]

저 처름 입력하면은 “C:\Default Company Name\MyPROGRAM” 경로에 디렉토리를 만들고 Installer에 추가한 파일이 설치가 됩니다. 간단하면서도 모르면 그냥 헤메가 되는것 같아서 적어 봅니다.

 Windows에서 사용하는 환경변수를 그대로 사용할수 있어서 글 말미에 참고 삼아서 넣어 놓습니다. 현재 모두 테스트를 해 본것은 아니지만 어느정도 사용이 가능한 부분이여서 참고만 해주시면 됩니다.
%HomeDrive% – 로그인한 계정의 정보가 들어있는 드라이브
%HomePath% – 로그인한 계정의 폴더
%SystemDrive% – 윈도우가 부팅된 드라이브
%SystemRoot% – 부팅된 운영체제가 들어있는 폴더
%ProgramFiles% – 기본 프로그램 설치 폴더
%TEMP%, %TMP% – 임시 파일이 저장되는 폴더
%ComSpec% – 기본 명령 프롬프트 프로그램
%USERDOMAIN% – 로그인한 시스템의 도메인 명
%USERNAME% – 로그인한 계정 이름
%USERPROFILE% – 로그인한 유저의 프로필이 들어있는 폴더명
%ALLUSERPROFILE% – 모든 사용자 프로필이 저장된 폴더
%APPDATA% – 설치된 프로그램의 필요 데이터가 저장된 폴더
%LOGONSERVER% – 로그인한 계정이 접속한 서버명
%Path% – 실행 참조용 폴더 지정 목록
%PathEXT% – 참조용 폴더에서 검색한 파일들의 확장자 목록

 

1. INIT(BackgroundWorker/Redis Server Connect)
2. Get Music List & BLPUSH( with Redis Key)
3. BackgroundWorker Process(BLPOP with Redis Key)

 

 

UAPDBMQ0010.cs
0.01MB
program.cs
0.00MB
RADIO_K_18_00.cs
0.01MB

 



csc.exe /reference:ServiceStack.Common.dll,
ServiceStack.dll,ServiceStack.Interfaces.dll,
ServiceStack.ServiceInterface.dll,
Newtonsoft.Json.Net20.dll 
/out:MMM.exe 
/recurse:*.cs



RedisCheck.cs
0.00MB
RedisMusicData.cs
0.01MB
program.cs
0.00MB




csc.exe
/reference:ServiceStack.Common.dll,
ServiceStack.dll,
ServiceStack.Interfaces.dll,
ServiceStack.ServiceInterface.dll 
/out:MMM.exe 
/recurse:*.cs

 


using System;
using System.Timers;
using System.IO;


class Program
{
    public static void Main()
    {
        CHKNMNM nmm = new CHKNMNM();
        nmm.CALCCHK();
        nmm.REALCHK();
        nmm.DISPCHK();
    }
}

class CHKNMNM
{
    string[] HOLIDAY = new string[]
    {
    "2024-01-01",
    "2024-02-09",
    "2024-02-12",
    "2024-03-01",
    "2024-04-10",
    "2024-05-01",
    "2024-05-06",
    "2024-05-15",
    "2024-06-06",
    "2024-08-15",
    "2024-09-16",
    "2024-09-17",
    "2024-09-18",
    "2024-10-03",
    "2024-10-09",
    "2024-12-25",
    };
    string[] HOLIDAYNM = new string[]
    {
    "2024-01-01(신정)",
    "2024-02-09(구정)",
    "2024-02-12(구정)",
    "2024-03-01(삼일절)",
    "2024-04-10(선거일)",
    "2024-05-01(노동절)",
    "2024-05-06(어린이날대체)",
    "2024-05-15(부처님오신날)",
    "2024-06-06(현충일)",
    "2024-08-15(광복절)",
    "2024-09-16(추석)",
    "2024-09-17(추석)",
    "2024-09-18(추석)",
    "2024-10-03(개천절)",
    "2024-10-09(한글날)",
    "2024-12-25(크리스마스)",
    };
    string[] YOIL = new string[]
    {
    "MONDAY",
    "TUESDAY",
    "WEDNESDAY",
    "THURSDAY",
    "FRIDAY",
    "SATURDAY",
    "SUNDAY",
    };
    string[] RANDOMNM = new string[]
    {
    "CHO","PARK","JIN",
    };

    const int MAX_CNT = 1024;
    string[] CHKNM = new string[MAX_CNT];
    string[] CHKDT = new string[MAX_CNT];
    string[] CHKYO = new string[MAX_CNT];
    string[] CHKRM = new string[MAX_CNT];

    public void CALCCHK()
    {
        int ii = 0; //(1-MON, 7-SUNDAY)
        int day = 0;
        int mm = 0;
        int kk = 0;

DateTime now = DateTime.Now;
DateTime calcnow;

//POINT:CHKRM's INCREASE ITSELF
//POINT:RANDOMNM's INCREASE ITSELF
//POINT:CHKRM's INCREASE ITSELF
//POINT:RANDOMNM's INCREASE ITSELF

        while(true)
        {
            calcnow = now.AddDays(day);
            if(    Convert.ToInt32(calcnow.ToString("yyyy-MM-dd").Replace("-","")) < 20231231)
            {
                day++;
                continue;
            }
            if(    Convert.ToInt32(calcnow.ToString("yyyy-MM-dd").Replace("-","")) == 20250101) break;
            if(    Convert.ToInt32(calcnow.ToString("yyyy-MM-dd").Replace("-","")) == 20231231) ii=7;




    int check = 0;
    for(int ff =0; ff < HOLIDAY.Length; ff++)
    {
        if(calcnow.ToString("yyyy-MM-dd") == HOLIDAY[ff])
{
    check = 100;
    break;
}
    }


    if(check == 0)
    {
        if(ii==4) CHKRM[kk++] = RANDOMNM[ mm++ % 3];
else if(ii==5) CHKRM[kk++] = RANDOMNM[ mm++ % 3];
    }
    else
    {
        if(ii==1) CHKRM[kk++] = "PARK";
else if(ii==2) CHKRM[kk++] = "JIN";
else if(ii==3) CHKRM[kk++] = "CHO";
else if(ii==4) CHKRM[kk++] = RANDOMNM[ mm++ % 3];
else if(ii==5) CHKRM[kk++] = RANDOMNM[ mm++ % 3];
    }

    day++;
    ii++;
    
    if(ii == 8) ii = 1;
}
    }
    public void REALCHK()
    {
        int ii = 0; //(1-MON, 7-SUNDAY)
int day = 0;
int kk = 0;
int sum = 0;

DateTime now = DateTime.Now;
DateTime calcnow;

        while(true)
{
    calcnow = now.AddDays(day);
    if(    Convert.ToInt32(calcnow.ToString("yyyy-MM-dd").Replace("-","")) < 20231231)
    {
        day++;
continue;
    }
    if(    Convert.ToInt32(calcnow.ToString("yyyy-MM-dd").Replace("-","")) == 20250101) break;
    if(    Convert.ToInt32(calcnow.ToString("yyyy-MM-dd").Replace("-","")) == 20231231) ii=7;




    int check = 0;
    for(int ff =0; ff < HOLIDAY.Length; ff++)
    {
        if(calcnow.ToString("yyyy-MM-dd") == HOLIDAY[ff])
{
    check = 100;
    break;
}
    }


    if(check == 0)
    {
        if(ii==1)
{
    CHKNM[sum] = "PARK";
    CHKYO[sum] = YOIL[ii-1];
    CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");
}
else if(ii==2)
{
    CHKNM[sum] = "JIN";
    CHKYO[sum] = YOIL[ii-1];
    CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");
}
else if(ii==3)
{
    CHKNM[sum] = "CHO";
    CHKYO[sum] = YOIL[ii-1];
    CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");
}
        else if(ii==4)
{
    CHKNM[sum] = CHKRM[kk++];
    CHKYO[sum] = YOIL[ii-1];
    CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");
}
else if(ii==5)
{
    CHKNM[sum] = CHKRM[kk++];
    CHKYO[sum] = YOIL[ii-1];
    CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");
}
else if(ii==6)
{
    CHKNM[sum] = "HOLIDAY";
    CHKYO[sum] = YOIL[ii-1];
    CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");
}
else if(ii==7)
{
    CHKNM[sum] = "HOLIDAY";
    CHKYO[sum] = YOIL[ii-1];
    CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");
}
    }
    else if(check == 100)
    {
        CHKYO[sum] = YOIL[ii-1];
        CHKDT[sum] = calcnow.ToString("yyyy-MM-dd");

int subcheck = 0;
for(int ff=0; ff<HOLIDAY.Length; ff++)
{
    if(CHKDT[sum] == HOLIDAY[ff])
    {
        CHKNM[sum] = HOLIDAYNM[ff];
subcheck = 100;
break;
    }
}
if(subcheck == 0)
{
    CHKNM[sum] = "SPECIAL";
}
    }

    day++;
    ii++;
    sum++;
    
    if(ii == 8) ii = 1;
}
    }
    public void DISPCHK()
    {
        int kk = 0;

        while(true)
{
    string dateTxt = "";
    string nameTxt = "";

    int check = 0;
    for(int ii=0; ii<7; ii++)
    {
        dateTxt += CHKDT[kk] + "/";
nameTxt += CHKNM[kk] + "/";

        if(CHKDT[kk] == "2024-12-31")
{
    check = 100;
    break;
}

kk++;
    }
    Console.WriteLine(dateTxt);
    Console.WriteLine(nameTxt);

    if(check == 100) break;
}
    }
}




        
    
        

수정코드)

void AddTxtLines(System.Windows.Forms.RichTextBox tmp, string text, int maxLines)
{
    if(true)
    {
        try
        {
            if(tmp.Lines.Count() >= maxLines)
            {
                List<string> lines = tmp.Lines.ToList();
                lines.RemoveAt(0);
                tmp.Lines = lines.ToArray();
            }
        }
        catch(AccessViolationException accexp)
        {
            Console.WriteLine("[MUSIC_DEBUG]:" + accexp.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("[MUSIC_DEBUG]:" + e.Message);
        }
    }
    try
    {
        tmp.AppendText(text);
        tmp.ScrollToCaret();
    }
    catch(AccessViolationException accexp)
    {
        Console.WriteLine("[MUSIC_DEBUG]:" + accexp.Message);
    }
    catch(Exception e)
    {
        Console.WriteLine("[MUSIC_DEBUG]:" + e.Message);
    }
}

 

music_11_00.Designer.cs
0.01MB
program.cs
0.00MB
music_11_00.cs
0.01MB

수정코드)

void AddTxtLines(System.Windows.Forms.RichTextBox tmp, string text, int maxLines)
{
    if(true)
    {
        try
        {
            if(tmp.Lines.Count() >= maxLines)
            {
                List<string> lines = tmp.Lines.ToList();
                lines.RemoveAt(0);
                tmp.Lines = lines.ToArray();
            }
        }
        catch(AccessViolationException accexp)
        {
            Console.WriteLine("[MUSIC_DEBUG]:" + accexp.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("[MUSIC_DEBUG]:" + e.Message);
        }
    }
    try
    {
        tmp.AppendText(text);
        tmp.ScrollToCaret();
    }
    catch(AccessViolationException accexp)
    {
        Console.WriteLine("[MUSIC_DEBUG]:" + accexp.Message);
    }
    catch(Exception e)
    {
        Console.WriteLine("[MUSIC_DEBUG]:" + e.Message);
    }
}

 

program.cs
0.00MB
music_07_00.cs
0.01MB
music_07_00.Designer.cs
0.01MB

MSI와 EXE의 차이점


MSI 파일은 최신 Microsoft Windows 시스템에서 소프트웨어를 설치, 유지 관리 및 제거하는 데 사용되는 실행 파일입니다. 
EXE 파일은 '실행 파일'의 줄임말이며 확장명은 .exe입니다. 
실행 파일의 주된 목적은 컴퓨터에 이미 설치되어있는 파일을 설치하거나 실행하는 것입니다.

컴퓨터에 소프트웨어를 설치하려면 인터넷을 통해 구매하거나 무료로 다운로드하여 설치 프로그램을 다운로드해야합니다. 
소프트웨어, MIS 또는 EXE를 설치하는 동안 발생할 수있는 두 가지 유형의 파일이 있습니다. 
이 두 파일은 실행 가능 확장 파일입니다. 
이 두 파일은 동일한 기능을 수행하지만 설치 및 실행 프로그램은 다른 방식으로 수행합니다.

MSI 파일은 최신 Microsoft Windows 시스템에서 소프트웨어를 설치, 유지 관리 및 제거하는 데 사용되는 실행 파일입니다. 
'MSI'라는 용어는 Microsoft Installer라는 이름에서 파생되었으며 Windows Installer로 변경되었습니다. 
MSI 파일에 대한 정보는 설치 패키지에 저장되며 파일의 확장자는 .msi입니다. 
MSI 파일은 windows installer와 함께 사용되며 프로세스를 시작하거나 응용 프로그램을 실행하기 위해 EXE 파일이 필요합니다. 
MSI 파일은 Windows 업데이트 또는 응용 프로그램에 Microsoft에서 가장 일반적으로 사용됩니다.

MSI 파일을 두 번 클릭하면 Windows Installer가 화면에 팝업으로 나타나 패키지에서 파일 추출을 시작하고 사용자가 지정한 드라이브에 필요한 폴더와 파일을 만들고 패키지에 언급 된 바로 가기도 만들 수 있습니다 . MSI 파일은 MAC 컴퓨터에서 실행되지 않으며 적절한 변환 소프트웨어를 사용하여 EXE 파일로 변환해야합니다. MSI 파일 사용의 이점은 무인 설치를 위해 설계되었으므로 설치 관리자가 파일 다운로드를 위해 할당 된 키 입력 또는 클릭 기록을 유지할 수 있다는 것입니다. MSI 파일을 사용하면 얻을 수있는 또 다른 이점은 표준 GUI를 사용할 수 있다는 것입니다. 표준 GUI는 특정 수준으로 사용자 지정할 수 있으며 자신의 인터페이스를 만드는 복잡성을 제거합니다. MSI는 또한 주문형 설치 옵션을 제공합니다.
이 옵션은 컴퓨터에 부 파일 만 다운로드하고 응용 프로그램을 처음 실행할 때 나머지 파일을 다운로드합니다.

EXE 파일은 '실행 파일'의 줄임말이며 확장명은 .exe입니다. 
실행 파일의 주 목적은 다음과 같은 파일을 설치하거나 실행하는 것입니다.
컴퓨터에 이미 설치되어 있습니다. 
컴퓨터에 설치된 MSI 파일조차도 특정 파일을 실행하기 위해 하나 또는 두 개의 EXE 파일이 있습니다. 
EXE 파일을 사용하면 개발자가 설치 프로그램이 사용자와 상호 작용하는 방법에 대한 모든 자유를 얻을 수 있습니다. 
이러한 파일은 최신 게임 파일을 실행하는 데 가장 일반적으로 사용됩니다. 
이 게임 설치 프로그램은 대화식의 다채로운 인터페이스를 사용하여 패키지를 설치하는 동안 사용자를 즐겁게합니다.
EXE 파일은 거의 모든 운영 체제와 호환되지만 DOS, OpenVMS, Microsoft Windows, Symbian 및 OS / 2에서 가장 일반적으로 사용됩니다. 
실행 가능한 프로그램과 함께 많은 EXE 파일은 리소스라고하는 다른 구성 요소도 포함합니다. 
여기에는 실행 가능 프로그램이 GUI 용으로 사용할 수있는 비트 맵 및 아이콘이 포함될 수 있습니다. 
설치하는 동안 선택 사항을 기억할 수있는 MSI 파일과 달리 EXE 파일은 설치하는 동안 사용자가 '확인'또는 '다음'을 클릭해야 할 수 있습니다. 
EXE 파일은 위험한 파일로 간주되어 알려지지 않은 파일은 바이러스 또는 기타 악의적 인 루틴을위한 전송 시스템으로 사용할 수 있으므로 다운로드하지 않아야합니다.
소프트웨어 설치 프로그램을 개발할 때 선택할 실행 파일 유형을 결정하려면 설치 프로그램에 넣으려는 프로그램의 양과 노력 정도에 따라 결정하십시오. 
EXE를 사용하면 사용자 지정 가능한 옵션으로 설치 프로그램을 만들 수 있지만 MSI는 미리 설정된 표준을 준수하여 작업을 단순화합니다.

+ Recent posts