<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>F.R.I.D.A.Y.</title>
    <link>https://pang2h.tistory.com/</link>
    <description>사용자가 편한 프로그램을 개발하는 것</description>
    <language>ko</language>
    <pubDate>Thu, 9 Apr 2026 23:21:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>F.R.I.D.A.Y.</managingEditor>
    <image>
      <title>F.R.I.D.A.Y.</title>
      <url>https://tistory1.daumcdn.net/tistory/2900225/attach/76412c8f176a4eb581c352106d8a0fbf</url>
      <link>https://pang2h.tistory.com</link>
    </image>
    <item>
      <title>이전 버전 IME 사용</title>
      <link>https://pang2h.tistory.com/450</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Win11로 넘어오면서 전반자 전환 단축키를 누르지 않았음에도 불구하고 간헐적으로 전반자 전환이 발생하는 문제가 있는 것으로 확인되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 &amp;gt; 시간 및 언어 &amp;gt; 언어 및 지역 &amp;gt; 옵션 &amp;gt; Microsoft 입력기 탭에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호환성 - 이전 버전의 Microsoft IME&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 사용하도록 설정하면 문제가 해결되는 것을 확인했는데, 다수 PC에서 이를 설정해야하는 문제가 존재해 설정 값의 저장 위치를 파악했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744338632960&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HKEY_CURRENT_USER\Software\Microsoft\input\tsf\tsf3override\{A028AE76-01B1-46C2-99C4-ACD9858AE02F}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 레지스트리 경로의 NoTsf3Override5 값이 1인 경우 해당 옵션이 활성화되는 것을 확인하였는데, 레지스트리를 직접 건들이게 되면 최대 재부팅 전까지 일부 경우에서 입력에 오류가 발생함을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배치 스크립트로 자동화 한다면, 스크립트 실행 후 자동으로 재시작하도록 구성하는 것이 좋겠다.&lt;/p&gt;</description>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/450</guid>
      <comments>https://pang2h.tistory.com/450#entry450comment</comments>
      <pubDate>Fri, 11 Apr 2025 11:32:34 +0900</pubDate>
    </item>
    <item>
      <title>brute force VS. KMP algorithm</title>
      <link>https://pang2h.tistory.com/449</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;brute force vs. KMP 알고리즘의 속도를 비교해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제한 조건은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;https://en.wikipedia.org/wiki/algorithm 문서 100개 분량(복사 붙여넣기 X100)&lt;/li&gt;
&lt;li&gt;검색 문자열 &quot;algorithm&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 제한 조건으로 C#에서 탐색한 결과 대략적으로 아래의 결과를 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bruteforce - 100ms&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KMP algorithm - 50ms&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1회 실행의 실행시간 비가 bruteforce:KMP algorithm = 2:1이 나온다&lt;/p&gt;
&lt;pre id=&quot;code_1744001652445&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// bruteforce
List&amp;lt;int&amp;gt; list = new List&amp;lt;int&amp;gt;();
string str = richTextBox1.Text;
string pattern = textBox1.Text;

for(int i = 0; i&amp;lt; str.Length - pattern.Length; ++i)
{
    var substr = str.Substring(i, pattern.Length);
    if(substr == pattern)
    {
        list.Add(i);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744001676723&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// KMP algorithm
private void FailureFunction(List&amp;lt;int&amp;gt; a, string p)
{
    int i = 1; int j = 0;
    while (i &amp;lt; p.Length)
    {
        if (p[i] == p[j])
        {
            a[i] = j + 1;
            i++; j++;
        }
        else if (j &amp;gt; 0)
        {
            j = a[j - 1];
        }
        else
        {
            // a[i] = 0; // already initialize by zero
            i++;
        }
    }
}

private List&amp;lt;int&amp;gt; KMPSearch(string t, string p)
{
    List&amp;lt;int&amp;gt; ans = new List&amp;lt;int&amp;gt;();
    List&amp;lt;int&amp;gt; f = new List&amp;lt;int&amp;gt;();
    {
        for (int i = 0; i &amp;lt; p.Length; ++i) f.Add(0);
    }

    if (p.Length == 0) return new List&amp;lt;int&amp;gt;();

    FailureFunction(f, p);
    {

        int i, j;
        i = j = 0;
        while (i &amp;lt; t.Length)
        {
            if (t[i] == p[j])
            {
                j++;
                if (j == p.Length)
                {
                    j = 0;
                    ans.Add(i - j -1);
                }
                i++;
            }
            else if (j &amp;gt; 0)
            {
                j = f[j - 1];
            }
            else
            {
                i++;
            }
        }
    }

    return ans;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 별개로, 기본제공함수인 string.IndexOf를 이용해 찾아가는 경우 bruteforce 방식보다 수 십 배 느린 결과를 가져왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측으로는 IndexOf를 호출할 때 발생하는 오버헤드로 인해 발생하는 문제로 보인다.&lt;/p&gt;
&lt;pre id=&quot;code_1744001767644&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while (true)
{
    int val = str.IndexOf(textBox1.Text, start);
    if (val == -1 || val &amp;gt; str.Length) break;
    list.Add(val);
    start = val+1;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DEV/Algorithm</category>
      <category>KMP</category>
      <category>문자열 검색</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/449</guid>
      <comments>https://pang2h.tistory.com/449#entry449comment</comments>
      <pubDate>Mon, 7 Apr 2025 13:56:34 +0900</pubDate>
    </item>
    <item>
      <title>APFD(Average Percentage of Faults Detected)</title>
      <link>https://pang2h.tistory.com/448</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5AitR/btsL5z9KHpG/JyJdqUkUFnRrOZEmd9PahK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5AitR/btsL5z9KHpG/JyJdqUkUFnRrOZEmd9PahK/img.jpg&quot; data-alt=&quot;https://product.kyobobook.co.kr/detail/S000001732437&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5AitR/btsL5z9KHpG/JyJdqUkUFnRrOZEmd9PahK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5AitR%2FbtsL5z9KHpG%2FJyJdqUkUFnRrOZEmd9PahK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;240&quot; height=&quot;331&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;631&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://product.kyobobook.co.kr/detail/S000001732437&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSTS 공부하다가 계산식과 예제가 어떻게 연결되는지 잠깐 난해해서 기억할 겸 작성하는 글.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;APFD는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;$$APFD =&amp;nbsp; (1 - \frac{Tf1 + Tf2 + ... + Tfm}{n \times m} + \frac{1}{2 \times n}) \times 100$$&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;n = 테스트케이스 수, m = 결함 수, $TCf_i$ = 결함 i를 겸출하는 테스트 케이스 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 계산된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 122px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 37px;&quot; rowspan=&quot;2&quot;&gt;테스트 케이스&lt;br /&gt;순서&lt;/td&gt;
&lt;td style=&quot;width: 83.3335%; text-align: center; height: 20px;&quot; colspan=&quot;5&quot;&gt;결함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f1&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f2&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f3&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f4&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;TC1&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;TC2&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;TC3&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;TC4&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;TC5&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;위와 같을 때, 테스트케이스를 1부터 5까지 순서대로 실행하는 경우 결함 $f_i$를 확인하는 테스트 케이스 번호는 아래와 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;f1 = 1, f2 = 2, f3 = 4,&amp;nbsp;f4 = 3,&amp;nbsp;f5 = 2&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서, APFD의 $TCF_i$는 TC 번호가 아닌 실행 순서를 의미한다. 다만 테스트케이스 1부터 5까지 순서대로 실행하므로 실행 순서 = TC# 이라 볼 수 있으므로 APFD 계산식에는 아래와 같이 입력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;$$APFD = (1 - \frac{1+2+4+3+2}{5 \times 5} + \frac{1}{2 \times 5}) \times 100 = 62$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만일 책과 같이 TC2, TC4, TC3, TC1, TC5 순서대로 실행한다고 가정하면 &lt;b&gt;아래와 같이 표를 변경해서 보는 것이 계산에 편리하다고 보겠다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 131px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 37px;&quot; rowspan=&quot;2&quot;&gt;테스트 케이스&lt;br /&gt;순서&lt;/td&gt;
&lt;td style=&quot;width: 83.3335%; text-align: center; height: 20px;&quot; colspan=&quot;5&quot;&gt;결함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f1&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f2&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f3&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f4&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;f5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;TC2&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;TC4&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;TC3&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;X(✔)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;TC1&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;TC5&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 결함 $f_i$를 처음 확인하는 순서는 다음과 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;f1 = 1, f2 = 1, f3 = 2, f4 = 3, f5 = 1&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;$$APFD = (1 - \frac{1 + 1 + 2 + 3 + 1}{5 \times 5} + \frac{1}{2 \times 5}) \times 100 = 78$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 TC 번호대로 수행하는 것보다 2-4-3-1-5 순으로 실행하는 것이 테스트케이스 수행에 도움이 된다.&lt;/p&gt;</description>
      <category>Certificate/CSTS</category>
      <category>apfd</category>
      <category>csts</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/448</guid>
      <comments>https://pang2h.tistory.com/448#entry448comment</comments>
      <pubDate>Mon, 3 Feb 2025 17:01:00 +0900</pubDate>
    </item>
    <item>
      <title>BAEKJOON 15649:N과 M(1)</title>
      <link>https://pang2h.tistory.com/447</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RFcKh/btsFGo0AwF3/rIF9TPQuPzN92buXRCxw1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RFcKh/btsFGo0AwF3/rIF9TPQuPzN92buXRCxw1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RFcKh/btsFGo0AwF3/rIF9TPQuPzN92buXRCxw1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRFcKh%2FbtsFGo0AwF3%2FrIF9TPQuPzN92buXRCxw1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;404&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제한시간 내 순열 만들기&lt;/p&gt;
&lt;figure id=&quot;og_1710030891273&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;15649번: N과 M (1)&quot; data-og-description=&quot;한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15649&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15649&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GTpd0/hyVxuRp65L/UZV8EkfwUWGsGPZ3yTQwh0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15649&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15649&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GTpd0/hyVxuRp65L/UZV8EkfwUWGsGPZ3yTQwh0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;15649번: N과 M (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순열 자체를 구하는 속도는 빠르지만, 이를 하나씩 출력하는 과정에서 속도를 잡아먹는 것이 많기 때문에 stringstream에 출력할 문자열을 저장한 뒤, 최종에 한번 출력하도록 하여 속도 향상을 꾀함&lt;/p&gt;
&lt;pre id=&quot;code_1710030940804&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;sstream&amp;gt;

using namespace std;

int visited[9];
int permutationList[9];
stringstream ss;

void bt(int maxValue, int depth, int maxDepth) {
	if (depth == maxDepth) {
		string str;
		for (int i = 0; i &amp;lt; maxDepth; ++i) {
			ss &amp;lt;&amp;lt; permutationList[i] &amp;lt;&amp;lt; &quot; &quot;;
		}
		ss &amp;lt;&amp;lt; endl;
		return;
	}

	for (int i = 1; i &amp;lt;= maxValue; ++i) {
		if (!visited[i]) {
			visited[i] = true;
			permutationList[depth] = i;
			bt(maxValue, depth + 1, maxDepth);
			visited[i] = false;
		}
	}

}

int main() {

	int n, m;
	cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; m;
	bt(n, 0, m);
	cout &amp;lt;&amp;lt; ss.str();
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eaZ7Ed/btsFDGPdJJf/2bpG2DbKqKTIpgcfq2AzpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eaZ7Ed/btsFDGPdJJf/2bpG2DbKqKTIpgcfq2AzpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eaZ7Ed/btsFDGPdJJf/2bpG2DbKqKTIpgcfq2AzpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeaZ7Ed%2FbtsFDGPdJJf%2F2bpG2DbKqKTIpgcfq2AzpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;328&quot; height=&quot;188&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드로 작성시 16ms로 나오고&lt;/p&gt;
&lt;pre id=&quot;code_1710031227775&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ios.sync_with_stdio(0);
cin.tie(0);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두 함수를 사용하여 입출력 비동기화를 진행한 경우보다 빨랐음을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘 최적화도 최적화지만 큰 출력이 필요한 경우엔 여러번에 나눠 출력하는 것보다 모아서 한번에 출력하는게 속도 향상에 도움이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭣보다, 개인적으로 저 두 코드 사용하는게 꼼수같은 느낌이라 그리 선호하지도 않는다. 특히나 알고리즘을 공부하는 문제에 있어서, 저 명령을 통해서라야 통과할 수 있는 기준을 제시한 문제가 있다면 수정되어야하지 않을까.. 싶기도 하다.&lt;/p&gt;</description>
      <category>DEV/Algorithm</category>
      <category>15649</category>
      <category>Backtracking</category>
      <category>BJS</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/447</guid>
      <comments>https://pang2h.tistory.com/447#entry447comment</comments>
      <pubDate>Sun, 10 Mar 2024 09:44:34 +0900</pubDate>
    </item>
    <item>
      <title>exe 파일 아이콘 변경</title>
      <link>https://pang2h.tistory.com/445</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbsqGx/btrG3pSgkWf/OSA5dOOwAGrN1zg8E1GkaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbsqGx/btrG3pSgkWf/OSA5dOOwAGrN1zg8E1GkaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbsqGx/btrG3pSgkWf/OSA5dOOwAGrN1zg8E1GkaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbsqGx%2FbtrG3pSgkWf%2FOSA5dOOwAGrN1zg8E1GkaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;377&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C/C++로 작성한 Win32 프로그램의 exe 파일 아이콘 변경하기&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리소스 파일 추가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;아이콘 변경을 위해서는 리소스 파일을 추가 해야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/obmd2/btrG4HYXE8W/q3KKCWgLoEDzC5uYKQPLX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/obmd2/btrG4HYXE8W/q3KKCWgLoEDzC5uYKQPLX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/obmd2/btrG4HYXE8W/q3KKCWgLoEDzC5uYKQPLX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fobmd2%2FbtrG4HYXE8W%2Fq3KKCWgLoEDzC5uYKQPLX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1413&quot; height=&quot;658&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;프로젝트에서 [새 항목 추가 - 리소스 - 리소스 파일]을 선택해 프로젝트에 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Eq0f/btrG4HkmjfL/MRe2eAhmZsIETS5DPHfIm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Eq0f/btrG4HkmjfL/MRe2eAhmZsIETS5DPHfIm0/img.png&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;469&quot; data-is-animation=&quot;false&quot; style=&quot;width: 33.2729%; margin-right: 10px;&quot; data-widthpercent=&quot;34.07&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Eq0f/btrG4HkmjfL/MRe2eAhmZsIETS5DPHfIm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Eq0f%2FbtrG4HkmjfL%2FMRe2eAhmZsIETS5DPHfIm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xZbbX/btrG2tVepI3/hSqok5lXBRHC4XbOdRWwpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xZbbX/btrG2tVepI3/hSqok5lXBRHC4XbOdRWwpK/img.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;795&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;28.49&quot; style=&quot;width: 27.8228%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xZbbX/btrG2tVepI3/hSqok5lXBRHC4XbOdRWwpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxZbbX%2FbtrG2tVepI3%2FhSqok5lXBRHC4XbOdRWwpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;764&quot; height=&quot;795&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ma62H/btrG2sPwnfB/f6isUpaxEp9JX98GTupYv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ma62H/btrG2sPwnfB/f6isUpaxEp9JX98GTupYv1/img.png&quot; data-origin-width=&quot;235&quot; data-origin-height=&quot;186&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;37.44&quot; data-filename=&quot;blob&quot; style=&quot;width: 36.5788%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ma62H/btrG2sPwnfB/f6isUpaxEp9JX98GTupYv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fma62H%2FbtrG2sPwnfB%2Ff6isUpaxEp9JX98GTupYv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;235&quot; height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;리소스 뷰[# Ctrl + Shift + E]에서 리소스를 추가한다. 프로그램의 아이콘을 변경할 것이므로 아이콘을 추가한다. 가져오기를 통해, 원하는 아이콘을 별도로 추가할 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;추가가 완료되면 세 번째 사진과 같이 IDI_ICON1 등의 추가된 아이콘이 발생함을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이제 솔루션 탐색기[# Ctrl + Alt + L]에서 Resource.rc의 코드 보기[# F7]를 통해 코드 편집을 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnfwC0/btrG0BsFGmp/P8THETYFLPASfqTwkU8HN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnfwC0/btrG0BsFGmp/P8THETYFLPASfqTwkU8HN0/img.png&quot; data-origin-width=&quot;333&quot; data-origin-height=&quot;212&quot; data-is-animation=&quot;false&quot; data-filename=&quot;edited_edited_blob&quot; data-widthpercent=&quot;58.65&quot; style=&quot;width: 57.9682%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnfwC0/btrG0BsFGmp/P8THETYFLPASfqTwkU8HN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnfwC0%2FbtrG0BsFGmp%2FP8THETYFLPASfqTwkU8HN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;333&quot; height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlo1j4/btrG248GTEK/pjAPrFHsahoufudzZ16Nsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlo1j4/btrG248GTEK/pjAPrFHsahoufudzZ16Nsk/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;903&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;41.35&quot; data-filename=&quot;blob&quot; style=&quot;width: 40.869%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlo1j4/btrG248GTEK/pjAPrFHsahoufudzZ16Nsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdlo1j4%2FbtrG248GTEK%2FpjAPrFHsahoufudzZ16Nsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;903&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;코드 편집기를 열면 오른쪽 이미지와 같이 리소스 관련 내용이 소스코드 형태로 작성되어있음을 확인할 수 있다. 코드 하단의 Icon 영역에 아래 코드를 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1657553710957&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/////////////////////////////////////////////////////////////////////////////
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1               ICON                    &quot;favicon.ico&quot;
MAINICON                ICON                    &quot;favicon.ico&quot; // 작성할 코드
#endif    // 한국어(대한민국) resources
/////////////////////////////////////////////////////////////////////////////&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;작성할 코드&lt;/b&gt;로 주석 처리된 라인을 추가로 작성해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래와 같이 기본 아이콘이던 exe 파일의 아이콘이 변경됨을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wzRNG/btrG3rP4k4o/vzRykY1RzOsZNXBosIDkPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wzRNG/btrG3rP4k4o/vzRykY1RzOsZNXBosIDkPK/img.png&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;351&quot; data-is-animation=&quot;false&quot; style=&quot;width: 55.7364%; margin-right: 10px;&quot; data-widthpercent=&quot;56.39&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wzRNG/btrG3rP4k4o/vzRykY1RzOsZNXBosIDkPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwzRNG%2FbtrG3rP4k4o%2FvzRykY1RzOsZNXBosIDkPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;473&quot; height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Fv1r/btrG5rImxlM/mXu7vqFiXknJ7e7LoR7ew1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Fv1r/btrG5rImxlM/mXu7vqFiXknJ7e7LoR7ew1/img.png&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;404&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.1008%;&quot; data-widthpercent=&quot;43.61&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Fv1r/btrG5rImxlM/mXu7vqFiXknJ7e7LoR7ew1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Fv1r%2FbtrG5rImxlM%2FmXu7vqFiXknJ7e7LoR7ew1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;421&quot; height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DEV/C C++</category>
      <category>c</category>
      <category>c++</category>
      <category>exe 파일</category>
      <category>Icon</category>
      <category>pe파일</category>
      <category>vs</category>
      <category>아이콘</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/445</guid>
      <comments>https://pang2h.tistory.com/445#entry445comment</comments>
      <pubDate>Tue, 12 Jul 2022 00:38:41 +0900</pubDate>
    </item>
    <item>
      <title>사용자 정의 비클라이언트 영역</title>
      <link>https://pang2h.tistory.com/444</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;C#에서 비클라이언트의 ownerdraw를 하려면WinApi가 필수일 듯.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657499472373&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;비클라이언트 영역 - Win32 apps&quot; data-og-description=&quot;시스템은 제목 표시줄, 메뉴 모음 또는 창 프레임과 같은 비클라이언트 영역의 일부를 업데이트해야 할 때마다 WM\_NCPAINT 메시지를 창으로 보냅니다.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bj6XCh/hyO3jV8xJn/8pic5S9iZbLcSlZubM5JD0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/windows/win32/gdi/nonclient-area&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bj6XCh/hyO3jV8xJn/8pic5S9iZbLcSlZubM5JD0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;비클라이언트 영역 - Win32 apps&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;시스템은 제목 표시줄, 메뉴 모음 또는 창 프레임과 같은 비클라이언트 영역의 일부를 업데이트해야 할 때마다 WM\_NCPAINT 메시지를 창으로 보냅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F7Mxv/btrGVkRsUnr/qLn99RPU9v5eMXub140i1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F7Mxv/btrGVkRsUnr/qLn99RPU9v5eMXub140i1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F7Mxv/btrGVkRsUnr/qLn99RPU9v5eMXub140i1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF7Mxv%2FbtrGVkRsUnr%2FqLn99RPU9v5eMXub140i1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1111&quot; height=&quot;211&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1657499631007&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        protected override void WndProc(ref Message Msg)
        {
            Rectangle rect;

            switch (Msg.Msg)
            {
                case WinApi.Message.WM_NCACTIVE:
                case WinApi.Message.WM_NCPAINT:

                    rect = new Rectangle(Location, Size);
                    IntPtr hdc = HDC.GetWindowDC(Msg.HWnd);

                    HDC.Rectangle(hdc, 0, 0, Width, 40);
                
                    Msg.WParam = (IntPtr)1;
                    return;
            }
            base.WndProc(ref Msg);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;HDC는 WinAPI 중 HDC, Rectangle 등 GDI 관련 코드를 C#에서 사용할 수 있도록 작성한 클래스이며, Form의 WndProc를 오버라이드한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nCocu/btrGWz8MsTy/ixe09CRKoLWnuOQswX50V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nCocu/btrGWz8MsTy/ixe09CRKoLWnuOQswX50V1/img.png&quot; data-alt=&quot;실행 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nCocu/btrGWz8MsTy/ixe09CRKoLWnuOQswX50V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnCocu%2FbtrGWz8MsTy%2Fixe09CRKoLWnuOQswX50V1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1014&quot; height=&quot;607&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실행 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OwnerDrawing 되었다. 물론, 안 예쁘지만.. 우측 끝 부분에 닫기, 최대/최소 버튼이 그려지지 않고 숨겨져 있는데, 기능은 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제목 높이도 수정할 수 있을 것으로 보인다. 대신, WinApi를 적절히 사용해야한다.&lt;/p&gt;</description>
      <category>DEV/.Net</category>
      <category>ncpaint</category>
      <category>Ownerdraw</category>
      <category>winapi</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/444</guid>
      <comments>https://pang2h.tistory.com/444#entry444comment</comments>
      <pubDate>Mon, 11 Jul 2022 09:38:21 +0900</pubDate>
    </item>
    <item>
      <title>창 흔들기 제스처 끄기</title>
      <link>https://pang2h.tistory.com/443</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;창을 빠르게 흔들면 다른 창이 최소화되는데, 이게 기능이라서 켜고 끄고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;[Win] + R 키로 실행 열기&lt;/li&gt;
&lt;li&gt;gpedit.msc명령 입력으로 &quot;로컬 그룹 정책 편집기&quot; 열기[# 일부 지원하지 않는 Windows 에디션이 존재한다고 들었다.]&lt;/li&gt;
&lt;li&gt;사용자 구성 - 관리 템플릿 - 바탕화면의 &quot;Areo 흔들기 창 최소화 마우스 제스쳐 사용 안함을 사용으로 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;879&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6CX3h/btrGUrXCjxN/Z9eikW0v7J2RobXiB7GKU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6CX3h/btrGUrXCjxN/Z9eikW0v7J2RobXiB7GKU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6CX3h/btrGUrXCjxN/Z9eikW0v7J2RobXiB7GKU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6CX3h%2FbtrGUrXCjxN%2FZ9eikW0v7J2RobXiB7GKU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1447&quot; height=&quot;879&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;879&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구성되지 않음의 기본값은 제스처 사용이다.&lt;/p&gt;</description>
      <category>Life</category>
      <category>gpedit.msc</category>
      <category>Windows기능</category>
      <category>제스처</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/443</guid>
      <comments>https://pang2h.tistory.com/443#entry443comment</comments>
      <pubDate>Mon, 11 Jul 2022 09:23:11 +0900</pubDate>
    </item>
    <item>
      <title>정의 피킹 단축키가 안 먹어</title>
      <link>https://pang2h.tistory.com/442</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Visual Studio에서 자주 사용하는 기능 중에 정의 피킹이라는 기능이 있는데, 코드에서 Alt + F12를 누르면 해당 코드의 선언 부분을 좁은 공간으로 볼수 있어서 자주 사용함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 컴퓨터를 새로 맞췄는데 오류가 나는지 아니면 cpu랑 호환이 안되는지 모르겠지만 Alt + F12를 이용한 정의피킹 단축이 안 먹어..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 개별 입력으로는 잘 들어가는데, 왜 안되는지 모르겠네..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키보드가 이상하나 싶어서 키 바인딩을 다른걸로 바꿔도 보고 했는데 안 먹음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정의 피킹 단축키를 바꿔서 Ctrl 기반으로 하면 또 동작하고..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무선 키보드 사용하는데, 전송 과정에서 문제 생기나 싶어서 노트북으로 확인해보면 Alt + F12로 정의피킹 열림.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예상가는 건 CPU 호환인데... 아니기만 바래야지 뭐..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이리저리 돌려보다 Alt + F1을 누르는데, Geforce Experience Ingame-Overlay가 켜진다. 확인하니 저 기능이 활성화 돼있어서 발생한 문제. 끄는 것으로 해결했다.&lt;/p&gt;</description>
      <category>Life</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/442</guid>
      <comments>https://pang2h.tistory.com/442#entry442comment</comments>
      <pubDate>Mon, 11 Jul 2022 04:52:02 +0900</pubDate>
    </item>
    <item>
      <title>Visual Studio에서 WSL로 컴파일하기</title>
      <link>https://pang2h.tistory.com/441</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vHEBq/btrGQ7c4OCM/cm0Ji0uKrveLXrrkHviHO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vHEBq/btrGQ7c4OCM/cm0Ji0uKrveLXrrkHviHO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vHEBq/btrGQ7c4OCM/cm0Ji0uKrveLXrrkHviHO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvHEBq%2FbtrGQ7c4OCM%2Fcm0Ji0uKrveLXrrkHviHO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;383&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio만큼 괜찮은 IDE가 없어서[# 진짜 다른 IDE로 못 넘어가겠다..] 리눅스 과제를 할 때도 종종 Visual Studio를 이용해서 코드를 쓰곤 한다.&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;기존 반反 오픈소스 진영의 대표격인 Microsoft에 새로운 CEO로 사티아 나델라가 취임하면서 그 행보가 바뀌었다. Windows PE 프로그램을 Linux에서 실행할 수 있도록 해주는 &lt;a href=&quot;https://namu.wiki/w/%EC%99%80%EC%9D%B8(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;Wine&lt;/span&gt;&lt;/a&gt;의 개발에 직접적인 도움을 준다던지, Github를 인수해버린다던지.. 몇 해 전에는 .Net을 오픈소스로 풀어버렸던 적도 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;WSL 설치하기&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;돌아와서, Windows에도 변화가 생겼다. Windows kernel 위에서 Linux 커널이 돌아가도록 업데이트가 이뤄졌다. 이름이 WSL[# Windows Subsystem for Linux]으로, 기본 활성화는 되어있지 않다. &lt;b&gt;프로그램 추가/제거 항목의 Windows 기능 켜기/끄기에서 Linux용 Windows 하위 시스템을 활성화 해주어야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZCs8g/btrGS4HxmqY/tNmDgeSnw7ovqomCyX7SWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZCs8g/btrGS4HxmqY/tNmDgeSnw7ovqomCyX7SWk/img.png&quot; data-origin-width=&quot;1689&quot; data-origin-height=&quot;951&quot; style=&quot;width: 65.6961%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZCs8g/btrGS4HxmqY/tNmDgeSnw7ovqomCyX7SWk/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZCs8g%2FbtrGS4HxmqY%2FtNmDgeSnw7ovqomCyX7SWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1689&quot; height=&quot;951&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYl07y/btrGQ00iwLB/icuaGLDjINfLTLOSbgujg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYl07y/btrGQ00iwLB/icuaGLDjINfLTLOSbgujg1/img.png&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;615&quot; style=&quot;width: 33.1411%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYl07y/btrGQ00iwLB/icuaGLDjINfLTLOSbgujg1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYl07y%2FbtrGQ00iwLB%2FicuaGLDjINfLTLOSbgujg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;551&quot; height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;활성화 후 Windows가 재시작된다. 재시작 된 후에 Microsoft Store에서 Ubuntu를 검색/설치한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4tkup/btrGPNGHkvd/60noJJHF7yNPck6xMe4Pc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4tkup/btrGPNGHkvd/60noJJHF7yNPck6xMe4Pc1/img.png&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;243&quot; style=&quot;width: 44.8126%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4tkup/btrGPNGHkvd/60noJJHF7yNPck6xMe4Pc1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4tkup%2FbtrGPNGHkvd%2F60noJJHF7yNPck6xMe4Pc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;260&quot; height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0fxu0/btrGQbHkrva/1JfXH7jdjqiEourCGp5hT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0fxu0/btrGQbHkrva/1JfXH7jdjqiEourCGp5hT1/img.png&quot; data-origin-width=&quot;1802&quot; data-origin-height=&quot;1397&quot; style=&quot;width: 54.0246%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0fxu0/btrGQbHkrva/1JfXH7jdjqiEourCGp5hT1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0fxu0%2FbtrGQbHkrva%2F1JfXH7jdjqiEourCGp5hT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1802&quot; height=&quot;1397&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;설치가 완료된 후에는 설치된 Ubuntu를 실행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3qXZh/btrGPM8RRLI/kKf99tIRwfqK0kZrxgfpKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3qXZh/btrGPM8RRLI/kKf99tIRwfqK0kZrxgfpKK/img.png&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;213&quot; style=&quot;width: 42.5045%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3qXZh/btrGPM8RRLI/kKf99tIRwfqK0kZrxgfpKK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3qXZh%2FbtrGPM8RRLI%2FkKf99tIRwfqK0kZrxgfpKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;308&quot; height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J3a1p/btrGS4U09CC/9JB63ryjnDspyzKCnDD3RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J3a1p/btrGS4U09CC/9JB63ryjnDspyzKCnDD3RK/img.png&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;766&quot; style=&quot;width: 56.3327%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J3a1p/btrGS4U09CC/9JB63ryjnDspyzKCnDD3RK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ3a1p%2FbtrGS4U09CC%2F9JB63ryjnDspyzKCnDD3RK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1468&quot; height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;첫 실행 시 ubuntu 시스템 설치가 진행되고, 완료되면 계정을 생성하도록 유도된다. 계정명과 비밀번호를 입력하는 것으로 계정 생성이 끝난다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;WSL 연결을 위한 환경 구성&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;WSL을 연결할 때는 WSL 안에서도 연결을 위한 환경을 구성 해주어야하고, Visual Studio에서도 연결을 진행해주어야한다. 이 파트에서는 연결을 위한 환경을 구성하도록 한다. 여기를 이미 진행했다면 &amp;lt;Visual Studio에서 WSL 연결 설정&amp;gt; 항목을 참고 바란다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;ssh 서버 설정&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 원격 시스템 접근을 위한 ssh 서버를 활성화한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt install openssh-server
sudo service ssh start&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;위 명령으로 서버가 실행되었다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# Windows 실행 시 자동으로 ssh 서버 실행하기&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo systemctl enable ssh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령으로 Windows가 부팅되었을 대 자동으로 ssh 서버를 실행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;# Windows 실행 시 자동으로 ssh 서버 실행하기&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;포트 변경하기&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다른 프로그램과 충돌이 일어나지 않도록 포트를 변경한다. WSL 터미널에서 아래 명령을 입력한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo vi /etc/ssh/sshd_config&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;루트 권한으로 접근하므로 패스워드도 입력해준다.&lt;br /&gt;&lt;br /&gt;sshd_config 파일이 열리면 아래와 같이 나와있다. 수정을 진행하려면 i키를 입력해 수정모드로 진입해야한다.[# 자세한 내용은 vi 편집기 사용법을 참고 바람]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JvptM/btrGVlhoYhW/8DZxfamZkWh5aknhTLsTb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JvptM/btrGVlhoYhW/8DZxfamZkWh5aknhTLsTb1/img.png&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;777&quot; style=&quot;width: 49.4186%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JvptM/btrGVlhoYhW/8DZxfamZkWh5aknhTLsTb1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJvptM%2FbtrGVlhoYhW%2F8DZxfamZkWh5aknhTLsTb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1516&quot; height=&quot;777&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mP3Zf/btrGRHeXv0j/ktRoPXe4q56JqN4EaTRHkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mP3Zf/btrGRHeXv0j/ktRoPXe4q56JqN4EaTRHkk/img.png&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;777&quot; style=&quot;width: 49.4186%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mP3Zf/btrGRHeXv0j/ktRoPXe4q56JqN4EaTRHkk/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmP3Zf%2FbtrGRHeXv0j%2FktRoPXe4q56JqN4EaTRHkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1516&quot; height=&quot;777&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;항목의 #Port 22에서 #을 지우고 Port 뒤의 숫자를 1024 이상의 숫자[# 이 밑의 포트는 시스템 프로그램이나 주요 서비스에서 사용하고 있어서 이 이상으로 권장한다고 한다. 1024 이상의 포트에서도 &lt;a href=&quot;https://namu.wiki/w/%ED%8F%AC%ED%8A%B8#s-2.1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;잘 알려진 프로그램&lt;/span&gt;&lt;/a&gt;에서 기본으로 사용하는 포트들이 있으므로 설정 시 확인해야한다. ]로 변경해 활성화한다.&lt;br /&gt;&lt;br /&gt;Port 수정 후 아래로 내려서 PasswordAuthentication no 를 yes로 수정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyq3qN/btrGWamkKpC/MzFlDgaH6JCP2PON1XruMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyq3qN/btrGWamkKpC/MzFlDgaH6JCP2PON1XruMK/img.png&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;777&quot; style=&quot;width: 49.4186%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyq3qN/btrGWamkKpC/MzFlDgaH6JCP2PON1XruMK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feyq3qN%2FbtrGWamkKpC%2FMzFlDgaH6JCP2PON1XruMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1516&quot; height=&quot;777&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dx0nRm/btrGQDqMb6E/xtDlOGx9RgLTw9eJnYW9Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dx0nRm/btrGQDqMb6E/xtDlOGx9RgLTw9eJnYW9Uk/img.png&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;777&quot; style=&quot;width: 49.4186%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dx0nRm/btrGQDqMb6E/xtDlOGx9RgLTw9eJnYW9Uk/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdx0nRm%2FbtrGQDqMb6E%2FxtDlOGx9RgLTw9eJnYW9Uk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1516&quot; height=&quot;777&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이후 esc - wq 로 해당 변경을 저장한다.&lt;br /&gt;&lt;br /&gt;변경 사항을 적용하기 위해 ssh 서버를 재시작한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo service ssh restart&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;C++ 빌드 환경 설정&lt;/h4&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;C/C++ 개발을 하려면 C/C++을 위한 환경이 구성되어 있어야한다. 따라서 아래 명령을 실행한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install g++ gdb make ninja-build rsync zip&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이 항목은 gdb, CMake, rsync, zip, 기본 빌드 시스템 생성기를 설치한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;Visual Studio에서 WSL 연결 설정&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;WSL 터미널에서의 설정이 완료되었다면, 이제 Visual Studio에서 설정을 진행할 차례다.&lt;br /&gt;&lt;br /&gt;여기에서는 CMake 프로젝트를 이용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;1012&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Emg6/btrGWzsZSZa/B5ZbHGEkEKtIAM94d5kMD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Emg6/btrGWzsZSZa/B5ZbHGEkEKtIAM94d5kMD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Emg6/btrGWzsZSZa/B5ZbHGEkEKtIAM94d5kMD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Emg6%2FbtrGWzsZSZa%2FB5ZbHGEkEKtIAM94d5kMD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1520&quot; height=&quot;1012&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;1012&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;상단의 로컬 머신등 실행할 환경을 선택하는 곳에서 연결 관리를 클릭해 설정을 연다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FDRQp/btrGSxJUVfG/xHOmCn9RTDnG6CKK1kB9Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FDRQp/btrGSxJUVfG/xHOmCn9RTDnG6CKK1kB9Fk/img.png&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;283&quot; style=&quot;width: 44.6169%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FDRQp/btrGSxJUVfG/xHOmCn9RTDnG6CKK1kB9Fk/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFDRQp%2FbtrGSxJUVfG%2FxHOmCn9RTDnG6CKK1kB9Fk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;328&quot; height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vEFEz/btrGRGNTq6h/JdcdRk91PAbSsgRrX9jfZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vEFEz/btrGRGNTq6h/JdcdRk91PAbSsgRrX9jfZK/img.png&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;967&quot; style=&quot;width: 54.2203%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vEFEz/btrGRGNTq6h/JdcdRk91PAbSsgRrX9jfZK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvEFEz%2FbtrGRGNTq6h%2FJdcdRk91PAbSsgRrX9jfZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1362&quot; height=&quot;967&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;추가를 통해 호스트 이름, 포트, 사용자 이름, 암호를 입력하고 연결을 진행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;994&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/82tuk/btrGWz7CB9h/LaOuLQ0M8OzZIrCvEAQTyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/82tuk/btrGWz7CB9h/LaOuLQ0M8OzZIrCvEAQTyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/82tuk/btrGWz7CB9h/LaOuLQ0M8OzZIrCvEAQTyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F82tuk%2FbtrGWz7CB9h%2FLaOuLQ0M8OzZIrCvEAQTyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1384&quot; height=&quot;994&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;994&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;호스트 이름은 &quot;localhost&quot;혹은 &quot;127.0.0.1&quot;로 하고 포트와 사용자 이름, 암호는 각각 설정한 값으로 넣는다. 연결을 진행하면 아래와 같이 메시지가 발생하는데, &lt;b&gt;예&lt;/b&gt;를 눌러 이어나가도록 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cflqSP/btrGWzmfCwf/FX3m4cIQ0ZWgXS3QXjpTM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cflqSP/btrGWzmfCwf/FX3m4cIQ0ZWgXS3QXjpTM0/img.png&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;730&quot; style=&quot;width: 42.1928%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cflqSP/btrGWzmfCwf/FX3m4cIQ0ZWgXS3QXjpTM0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcflqSP%2FbtrGWzmfCwf%2FFX3m4cIQ0ZWgXS3QXjpTM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;942&quot; height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHcwj/btrGRkEkSUR/ELNI7JrEux5lFI8ZHkYXu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHcwj/btrGRkEkSUR/ELNI7JrEux5lFI8ZHkYXu1/img.png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;568&quot; style=&quot;width: 56.6444%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHcwj/btrGRkEkSUR/ELNI7JrEux5lFI8ZHkYXu1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHcwj%2FbtrGRkEkSUR%2FELNI7JrEux5lFI8ZHkYXu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이로써 WSL을 통한 Visual Studio로 Linux 개발을 할 수 있게 되었다.&lt;br /&gt;&lt;br /&gt;CMake 디버깅을 위해 아래와 같이 설정한 후 디버깅을 진행하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1295&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o0wt3/btrGPNUcRTx/FeFQH3uaS7kpYVgJBpOYo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o0wt3/btrGPNUcRTx/FeFQH3uaS7kpYVgJBpOYo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o0wt3/btrGPNUcRTx/FeFQH3uaS7kpYVgJBpOYo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo0wt3%2FbtrGPNUcRTx%2FFeFQH3uaS7kpYVgJBpOYo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1295&quot; height=&quot;232&quot; data-origin-width=&quot;1295&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1747&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csiNNK/btrGSx4cNnu/j7trzhfjDuHeUeu5ZJ1rv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csiNNK/btrGSx4cNnu/j7trzhfjDuHeUeu5ZJ1rv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csiNNK/btrGSx4cNnu/j7trzhfjDuHeUeu5ZJ1rv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsiNNK%2FbtrGSx4cNnu%2Fj7trzhfjDuHeUeu5ZJ1rv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1747&quot; height=&quot;322&quot; data-origin-width=&quot;1747&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;하단 리눅스 콘솔 창에 출력 결과를 확인할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;주의사항&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;WSL이 리눅스와 동일하다지만, 순수 리눅스와 다를 부분이 존재할 수 있다. 따라서 &lt;b&gt;개발을 WSL로 하더라도 순수 리눅스를 통해 검증을 진행하는 것이 좋겠다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;Reference.&lt;/h3&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Visual Studio에서 대상 Linux 시스템에 연결&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Visual Studio C++ 프로젝트 내에서 원격 Linux 머신 또는 Linux용 Windows 하위 시스템에 연결하는 방법입니다.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/linux/connect-to-your-remote-linux-computer?view=msvc-170&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bC14gi/hyO113iVCU/9VZ3A0iGhMvQYuPW8p7wK0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bGM7tG/hyO13fJAat/6Li0RJV6pXQ0Hlr3WByI6K/img.png?width=1157&amp;amp;height=788&amp;amp;face=0_0_1157_788,https://scrap.kakaocdn.net/dn/BxOll/hyO2bx4xPf/iPHw67Gn9d3Nbkh3u9L8pK/img.png?width=1185&amp;amp;height=273&amp;amp;face=0_0_1185_273&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/cpp/linux/connect-to-your-remote-linux-computer&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/linux/connect-to-your-remote-linux-computer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/linux/connect-to-your-remote-linux-computer?view=msvc-170&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bC14gi/hyO113iVCU/9VZ3A0iGhMvQYuPW8p7wK0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bGM7tG/hyO13fJAat/6Li0RJV6pXQ0Hlr3WByI6K/img.png?width=1157&amp;amp;height=788&amp;amp;face=0_0_1157_788,https://scrap.kakaocdn.net/dn/BxOll/hyO2bx4xPf/iPHw67Gn9d3Nbkh3u9L8pK/img.png?width=1185&amp;amp;height=273&amp;amp;face=0_0_1185_273');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio에서 대상 Linux 시스템에 연결&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio C++ 프로젝트 내에서 원격 Linux 머신 또는 Linux용 Windows 하위 시스템에 연결하는 방법입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;연습: Microsoft WSL 2(Linux용 Windows 하위 시스템 2) 및 Visual Studio 2022를 사용하여 C++ 빌드 및 디버그&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;WSL2(Linux용 Windows 하위 시스템 버전 2)를 사용하여 Visual Studio 2022에서 C++를 빌드하고 디버그하는 방법을 알아봅니다.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/build/walkthrough-build-debug-wsl2?view=msvc-170&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGwPKD/hyO15kjEd2/x1x1yK6ZCHTnnfLDSFiTi0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/b4WF7v/hyO3tDS9qJ/wH5nIjQBlOtekQDOKbx8A0/img.png?width=1170&amp;amp;height=832&amp;amp;face=0_0_1170_832,https://scrap.kakaocdn.net/dn/WYWPW/hyO19AgGn8/L9vmQZ7eI5FuGhUEkcpqcK/img.png?width=1118&amp;amp;height=309&amp;amp;face=0_0_1118_309&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/cpp/build/walkthrough-build-debug-wsl2&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/build/walkthrough-build-debug-wsl2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/cpp/build/walkthrough-build-debug-wsl2?view=msvc-170&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGwPKD/hyO15kjEd2/x1x1yK6ZCHTnnfLDSFiTi0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/b4WF7v/hyO3tDS9qJ/wH5nIjQBlOtekQDOKbx8A0/img.png?width=1170&amp;amp;height=832&amp;amp;face=0_0_1170_832,https://scrap.kakaocdn.net/dn/WYWPW/hyO19AgGn8/L9vmQZ7eI5FuGhUEkcpqcK/img.png?width=1118&amp;amp;height=309&amp;amp;face=0_0_1118_309');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;연습: Microsoft WSL 2(Linux용 Windows 하위 시스템 2) 및 Visual Studio 2022를 사용하여 C++ 빌드 및 디버그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;WSL2(Linux용 Windows 하위 시스템 버전 2)를 사용하여 Visual Studio 2022에서 C++를 빌드하고 디버그하는 방법을 알아봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;# index&lt;/p&gt;</description>
      <category>DEV/Tip</category>
      <category>Linux</category>
      <category>Microsoft</category>
      <category>visualstudio</category>
      <category>WSL</category>
      <category>원격빌드</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/441</guid>
      <comments>https://pang2h.tistory.com/441#entry441comment</comments>
      <pubDate>Sun, 10 Jul 2022 07:56:11 +0900</pubDate>
    </item>
    <item>
      <title>관리자 권한의 프로그램 시작 프로그램 등록</title>
      <link>https://pang2h.tistory.com/440</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM5Awi/btrDKJzqcEa/xPKBJ0UrXCobwULuezvo61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM5Awi/btrDKJzqcEa/xPKBJ0UrXCobwULuezvo61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM5Awi/btrDKJzqcEa/xPKBJ0UrXCobwULuezvo61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM5Awi%2FbtrDKJzqcEa%2FxPKBJ0UrXCobwULuezvo61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;373&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;레지스트리 시작 프로그램에 관리자 권한 프로그램 등록 시 발생하는 문제 해결하기&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시작 프로그램&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Windows 시작 프로그램은 개발자 입장에서 상당히 매력적인 기능일 것이다. 내 프로그램이 OS 시작과 함께 돌아간다고? 사용하는 시간이 늘어나는 것이나 마찬가지니...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;가장 간단한 등록 방법은 Startup 폴더에 해당 프로그램을 넣어두는 것이다. 바로가기도 아마 실행이 될것인데, 개발할 때는 주로 Startup 폴더에 넣는 것보다 선호되는 방법이 있으니, 아무래도 레지스트리 등록일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;.Net 차원에서도 Reg Key에 접근/수정하는 기능을 제공하니 편하기도 편하고..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그러나, 이러한 편의를 받는 프로그램은 일반 프로그램에 한정한다. 필요 권한이 requiredAdministrator 미만(asInvoker)의 프로그램. 즉, 관리자 권한을 필요로 하지 않는 일반 프로그램에 한정된다는 말이다. 관리자 권한이 필요한 프로그램은 권한 제어로 인해 UAC를 낮춰주지 않는 이상 제대로 실행이 되지 않는다. 레지스트리의 시작 프로그램 등록을 해 놓더라도!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;대안책&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그러나 관리자 권한 프로그램의 시작 프로그램 등록이 완전히 안 되는것은 아니다. 다행히 Windows Task Scheduler(작업 스케줄러)에 등록하는 것으로, 관리자 권한 프로그램의 시작 프로그램 등록이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1654125025378&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        public static void SetStartup()
        {

            Process.Start(&quot;cmd&quot;,$&quot;/c schtasks -create /sc onlogon /tn \&quot;\\pctory\\autorun\&quot; /tr \&quot;{Application.ExecutablePath}\&quot; /RL HIGHEST&quot;);

        }

        public static void ResetStartup()
        {
            Process.Start(&quot;cmd&quot;, $&quot;/c schtasks -delete /tn \&quot;\\pctory\\autorun\&quot; /f&quot;);
            Process.Start(&quot;cmd&quot;, $&quot;/c schtasks -delete /tn \&quot;\\pctory\&quot; /f&quot;);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위 두 메서드는 현재 진행중인 프로젝트에서 시작 프로그램 등록을 위한 스케줄러 등록을 하는 코드이다. 실제로는&amp;nbsp; cmd 명령 프롬프트로 작업을 하게 되는 것인데, 찾아보니 따로 .Net 상으로 지원하는 스케줄러 조작 기능이 없는 것으로 보인다. C++에서 할 수 있는 TaskScheduler 처리를 Wrapping 한 오픈소스가 있는 듯 싶은데, 진행중인 프로젝트에서는 외부 프로젝트를 끌어다 쓰면 승인을 받아야해서.. MetroForm 디자인도 안 가져다 쓰고 직접 코드 작성해서 프로젝트 안에 박아버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼, 작업 스케줄러 등록에 대한 자세한 내용은 schtasks 명령에 대해 찾아보길..&lt;/p&gt;</description>
      <category>DEV/.Net</category>
      <category>.NET</category>
      <category>c#</category>
      <category>pctory</category>
      <category>project</category>
      <category>Startup</category>
      <category>관리자권한</category>
      <category>시작프로그램</category>
      <author>F.R.I.D.A.Y.</author>
      <guid isPermaLink="true">https://pang2h.tistory.com/440</guid>
      <comments>https://pang2h.tistory.com/440#entry440comment</comments>
      <pubDate>Thu, 2 Jun 2022 08:14:31 +0900</pubDate>
    </item>
  </channel>
</rss>