Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

"Developer Command Prompt for VS 2022" 명령행 환경의 폰트를 바꾸는 방법

이상하군요, "Developer Command Prompt for VS 2022"의 폰트가 마음에 안 들어서, "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2022\Visual Studio Tools\Developer Command Prompt for VS 2022.lnk" 단축 파일을 우클릭, 속성창을 통해 변경/저장하려고 했더니 다음과 같은 오류가 발생합니다.

dev2022_cmd_font_1.png

Error Updating Shortcut

Unable to modify the shortcut:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2022\Visual Studio Tools\Developer Command Prompt for VS 2022.lnk.
Check to make sure it has not been deleted or renamed.

이런 경우 원인은, 해당 파일에 대한 저장 권한이 없기 때문입니다. 따라서 속성 창의 보안 탭을 통해 자신의 계정에 대해 (간단하게 Full Control, 또는) Write 권한을 주면 됩니다.

이후, 다시 저장을 하면 오류 없이 반영이 되는 것을 확인할 수 있습니다.




그런데, 재미있는 문제가 하나 더 있습니다. 폰트 설정을 "Consolas"로만 하면 처음 cmd 창이 뜰 때만 "Consolas"로 잠깐 나오고 이후 (위의 화면처럼) "Raster Fonts"로 자동으로 바뀌는 현상이 발생합니다.

희한하군요. ^^;

이 문제를 "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" 배치 파일을 조사하다보면 아래의 powershell.exe를 실행하는 단계부터임을 알게 됩니다.

@REM Send Telemetry if user's VS is opted-in
if "%VSCMD_SKIP_SENDTELEMETRY%"=="" (
    if "%VSCMD_DEBUG%" NEQ "" (
        @echo [DEBUG:%~nx0] Sending telemetry
        powershell.exe -NoProfile -Command "& {Import-Module '%~dp0\Microsoft.VisualStudio.DevShell.dll'; Send-VsDevShellTelemetry -NewInstanceType Cmd;}"
    ) else (
        START "" /B powershell.exe -NoProfile -Command "& {if($PSVersionTable.PSVersion.Major -ge 3){Import-Module '%~dp0\Microsoft.VisualStudio.DevShell.dll'; Send-VsDevShellTelemetry -NewInstanceType Cmd; }}" > NUL
    )
)

그러니까 결국 아래의 명령어를 실행하는 건데요,

START "" /B powershell.exe -NoProfile -Command "& {if($PSVersionTable.PSVersion.Major -ge 3){Import-Module 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\Microsoft.VisualStudio.DevShell.dll'; Send-VsDevShellTelemetry -NewInstanceType Cmd; }}"

즉, Powershell의 실행으로 인해 현재 cmd shell의 환경이 영향을 받은 것입니다. 실제로 Window + Q 키를 눌러 나오는 창에서 "Windows PowerShell(%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe)" 항목을 실행하면 다음과 같이 Powershell의 기본 폰트가,

dev2022_cmd_font_3.png

"Raster Fonts"임을 알 수 있습니다.

여기서 문제는, 저 창의 시스템 메뉴에서 "Defaults"를 선택해 폰트를 바꿔도 이후 뜨는 "Developer Command Prompt for VS 2022" 창에는 여전히 Raster Fonts로 나온다는 점입니다. (참고로, "Windows PowerShell"의 "Defaults" 폰트를 바꾸면 그 설정은 "HKEY_CURRENT_USER\Console" 경로의 "FaceName"에 저장됩니다.)

오호~~~ 도대체 이유를 알 수가 없군요. ^^; 이제 방법은 2가지가 있습니다. 만약 "Consolas" 이외의 폰트로 설정을 하는 경우라면 그냥 "Developer Command Prompt for VS 2022" 단축 파일의 속성 창을 이용해 설정하시면 됩니다.

반면, 굳이 "Consolas"로 쓰고 싶다면 VsDevCmd.bat 파일의 Send-VsDevShellTelemetry 코드를 그냥 주석 처리하시면 됩니다.

@REM Send Telemetry if user's VS is opted-in
if "%VSCMD_SKIP_SENDTELEMETRY%"=="" (
    if "%VSCMD_DEBUG%" NEQ "" (
        @echo [DEBUG:%~nx0] Sending telemetry
        powershell.exe -NoProfile -Command "& {Import-Module '%~dp0\Microsoft.VisualStudio.DevShell.dll'; Send-VsDevShellTelemetry -NewInstanceType Cmd;}"
    ) else (
        REM START "" /B powershell.exe -NoProfile -Command "& {if($PSVersionTable.PSVersion.Major -ge 3){Import-Module '%~dp0\Microsoft.VisualStudio.DevShell.dll'; Send-VsDevShellTelemetry -NewInstanceType Cmd; }}" > NUL
    )
)

사실 해당 작업이 그냥 텔레메트리 데이터를 전송하는 것에 불과하기 때문에,

using System.Management.Automation;

namespace Microsoft.VisualStudio.DevShell.Commands
{
  [Cmdlet("Send", "VsDevShellTelemetry")]
  public class SendVsDevShellTelemetryCommand : PSCmdlet
  {
    [Parameter(Mandatory = true)]
    public NewInstanceType NewInstanceType { get; set; }

    protected override void EndProcessing()
    {
      using (IVsTelemetryService telemetryService = VsTelemetryService.Factory())
      {
        this.WriteVerbose(string.Format("Sending 'NewInstance' event. NewInstanceType = '{0}'", (object) this.NewInstanceType));
        telemetryService.SendNewInstanceEvent(this.NewInstanceType);
      }
    }
  }
}

실행하지 않아도 "Developer Command Prompt for VS 2022" 본연의 작업에 영향을 주지는 않습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/27/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  32  33  34  35  36  37  38  39  [40]  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
12639정성태5/12/20219081오류 유형: 715. Arduino: Open Serial Monitor - The module '...\detection.node' was compiled against a different Node.js version using NODE_MODULE_VERSION
12638정성태5/12/20219991사물인터넷: 63. NodeMCU v1 ESP8266 - 펌웨어 내 파일 시스템(SPIFFS, LittleFS) 및 EEPROM 활용
12637정성태5/10/20219564사물인터넷: 62. NodeMCU v1 ESP8266 보드의 A0 핀에 다중 아날로그 센서 연결 [1]
12636정성태5/10/20219901사물인터넷: 61. NodeMCU v1 ESP8266 보드의 A0 핀 사용법 - FSR-402 아날로그 압력 센서 연동파일 다운로드1
12635정성태5/9/20219157기타: 81. OpenTabletDriver를 (관리자 권한으로 실행하지 않고도) 관리자 권한의 프로그램에서 동작하게 만드는 방법
12634정성태5/9/20218189개발 환경 구성: 572. .NET에서의 신뢰도 등급 조정 - 외부 Manifest 파일을 두는 방법파일 다운로드1
12633정성태5/7/20219718개발 환경 구성: 571. UAC - 관리자 권한 없이 UIPI 제약을 없애는 방법
12632정성태5/7/20219897기타: 80. (WACOM도 지원하는) Tablet 공통 디바이스 드라이버 - OpenTabletDriver
12631정성태5/5/20219790사물인터넷: 60. ThingSpeak 사물인터넷 플랫폼에 ESP8266 NodeMCU v1 + 조도 센서 장비 연동파일 다운로드1
12630정성태5/5/202110111사물인터넷: 59. NodeMCU v1 ESP8266 보드의 A0 핀 사용법 - CdS Cell(GL3526) 조도 센서 연동파일 다운로드1
12629정성태5/5/202111872.NET Framework: 1057. C# - CoAP 서버 및 클라이언트 제작 (UDP 소켓 통신) [1]파일 다운로드1
12628정성태5/4/20219841Linux: 39. Eclipse 원격 디버깅 - Cannot run program "gdb": Launching failed
12627정성태5/4/202110536Linux: 38. 라즈베리 파이 제로 용 프로그램 개발을 위한 Eclipse C/C++ 윈도우 환경 설정
12626정성태5/3/202110477.NET Framework: 1056. C# - Thread.Suspend 호출 시 응용 프로그램 hang 현상 (2)파일 다운로드1
12625정성태5/3/20219407오류 유형: 714. error CS5001: Program does not contain a static 'Main' method suitable for an entry point
12624정성태5/2/202113254.NET Framework: 1055. C# - struct/class가 스택/힙에 할당되는 사례 정리 [10]파일 다운로드1
12623정성태5/2/20219907.NET Framework: 1054. C# 9 최상위 문에 STAThread 사용 [1]파일 다운로드1
12622정성태5/2/20216654오류 유형: 713. XSD 파일을 포함한 프로젝트 - The type or namespace name 'TypedTableBase<>' does not exist in the namespace 'System.Data'
12621정성태5/1/202110350.NET Framework: 1053. C# - 특정 레지스트리 변경 시 알림을 받는 방법 [1]파일 다운로드1
12620정성태4/29/202112275.NET Framework: 1052. C# - 왜 구조체는 16 바이트의 크기가 적합한가? [1]파일 다운로드1
12619정성태4/28/202112803.NET Framework: 1051. C# - 구조체의 크기가 16바이트가 넘어가면 힙에 할당된다? [2]파일 다운로드1
12618정성태4/27/202111285사물인터넷: 58. NodeMCU v1 ESP8266 CP2102 Module을 이용한 WiFi UDP 통신 [1]파일 다운로드1
12617정성태4/26/20219057.NET Framework: 1050. C# - ETW EventListener의 Keywords별 EventId에 따른 필터링 방법파일 다운로드1
12616정성태4/26/20218955.NET Framework: 1049. C# - ETW EventListener를 상속받았을 때 초기화 순서파일 다운로드1
12615정성태4/26/20217059오류 유형: 712. Microsoft Live 로그인 - 계정을 선택하는(Pick an account) 화면에서 진행이 안 되는 문제
12614정성태4/24/20219851개발 환경 구성: 570. C# - Azure AD 인증을 지원하는 ASP.NET Core/5+ 웹 애플리케이션 예제 구성 [4]파일 다운로드1
... 31  32  33  34  35  36  37  38  39  [40]  41  42  43  44  45  ...