[C#] WPF 프로그램의 노티바(시스템 트레이) 아이콘 생성


그냥 바로 못한다


현장실습 중 만든 프로그램은 기본적으로 작동중에는 백그라운드에서 돌아야 한다. 라는 조건이 붙는데, 아래 글(2017/02/06 - [Tip/Develop] - [C#] WinForm 프로그램의 노티바(시스템 트레이) 아이콘 생성)과 같은 조건이다. 같은 C#이고, 전에 만들어둔 코드를 그대로 붙혀 두면 될 것이라고 쉽게 생각했었는데, 그게 아니었다. 당장 NotifyIcon 이라는 도구상자 컴포넌트가 없다.


이유를 알아보니, NotifyIcon이라는 컴포넌트는 System.Windows.Forms 안에 포함되어 있는 거고, WPF는 Forms를 Using하지 않으니 바로 사용할 수 없는 것. 간단하게 System.Windows.Forms을 Using하면 되지 않을까 라는 생각을 하지만, 그렇게 할 경우 MessageBox와 같은 System.Windows.Forms와 System.Windows.Controls에 동일하게 존재하는 객체들의 모호성이 생긴다.


결국은 그냥 NotifyIcon 객체를 직접 지시하여 생성해 주고 그 설정을 맞춰주면 된다. 사실 WinForm의 방법과 크게 차이는 없지만, 직접 지시를 해줘야 하는 부분이 있어야 한다는것.


배경이 똑같으니 목적이나 방법 또한 아래 글(2017/02/06 - [Tip/Develop] - [C#] WinForm 프로그램의 노티바(시스템 트레이) 아이콘 생성)과 거히 동일하니 뭘 할 건지는 해당 글을 먼저 보고 오는것을 추천.



그래서 하는 방법


매인 윈도우가 있는 클래스에 전역변수로 NotifyIcon을 직접 생성해 주고, init를 할 때 해당 객체를 적당히 맞춰준다. WinForm에서 생성하는것과는 다른 부분이 바로 이 부분이고, 그 뒤의 부분은 동일. 필요한 상황에 맞는 이벤트나 메서드에 NotifyIcon을 보여주고 창을 숨긴다. NotifyIcon에 더블클릭 이벤트를 걸어주고, 이 이벤트 안에는 NotifyIcon을 숨기고 창을 보이게 하는것.


1. NotifyIcon을 생성하고 설정

 public partial class MainWindow : Window{
    public System.Windows.Forms.NotifyIcon notify;

    public MainWindow(){
        InitializeComponent();
    }
    ...


전역으로 하나 생성해주고,


private void Window_Loaded(object sender, RoutedEventArgs e){
     notify = new System.Windows.Forms.NotifyIcon();
     notify.Icon = Properties.Resources.ico;
     notify.Text = "PLC 통신";
     notify.DoubleClick += Notify_DoubleClick;

     ...
}


Window가 로드될 때 이름과 아이콘, 그리고 이벤트를 지정해 준다. WinForm때와 마찬가지로 아이콘은 지정해주지 않으면 아무리 잘해도 보이지 않으니강조하는 이유는 내가 당해봐서… 꼭 빼먹지 말고 해주자.


2. 창이 숨겨지고 시스템 트레이 아이콘이 보이게

3. 시스템 트레이 아이콘이 숨겨지고 창이 보이게


는 사실 WinForm때와 동일하다. 2번의 경우 창이 닫길때나 숨겨야 할 상황의 메서드에 창을 숨기고 notifyIcon을 보이게 하면 되고, 3번의 경우에는 그 반대. 물론 그렇다고 WinForm의 코드를 그대로 복붙해서는 안된다. 창의 숨김, 보이기가 WinForm과는 다르니까 신경써주자.

 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        { 
            if(SharedKeyword.isRunning == true)
            {
                notify.Visible = true;
                this.Visibility = Visibility.Collapsed;
                e.Cancel = true;
                return;

            }
private void Notify_DoubleClick(object sender, EventArgs e)
        {
            notify.Visible = false;
            this.Visibility = Visibility.Visible;
        }


Minny_

,

[C#] WinForm 프로그램의 노티바(시스템 트레이) 아이콘 생성



간단한것만…


현장실습 중에 만든 프로그램에서 가장 기본이 되어야 하는것이 작동중에는 백그라운드에서 돌아야 한다.


막 메뉴가 추가되거나, 아이콘이 상태에 따라서 바뀌거나 하는것이 아닌 간단한 정도만 구현하면 됬었다. 그러니까 순전히 프로그램이 작동중일때(미들웨어로써 역활을 하고 있을때) 프로그램 종료를 하면 종료가 되는것이 아닌

  1. 창이 숨겨지고 2. 시스템 트레이(노티바)에 띄워지도록하고 3. 노티바 아이콘을 더블클릭하면 다시 창이 보이며 시스템 트레이(노티바) 아이콘은 없어지도록

하는것.



위의 목적대로 만드는 방법


WinForm 프로그램은 만들기 쉽다. 도구 상자에서 NotifyIcon 을 가져와서, 아이콘과 이름을 지정한 후, 필요한 상황에 맞는 이벤트나 메서드에 NotifyIcon을 보이게 하고 창을 숨기면 된다. NotifyIcon의 더블클릭 이벤트를 생성해주고 이 이벤트 안에는 NotifyIcon을 숨기고 창을 보이게 하면 끝.



1.NotifyIcon을 생성한다


그냥 도구상자에서 찾아 끌어오면 된다. 그리고 해당 콤포넌트의 아이콘과 이름을 지정해준다. 귀찮으니 이름은 기본값으로 놔두었다. 아이콘은 없으면 안된다. 아이콘이 없으면 아무리 잘 해놔도 보이지 않는다. 아무 아이콘이나 대충 끌어와 리소스에 넣고 맞춰주자.


2.창이 숨겨지고 시스템 트레이 아이콘이 보이게

위와 같은 목적으로 하려면 프로그램이 종료되지 않게 해야 하므로, 해당 프로그램의 매인 From에 FormCosing 이벤트를 붙이고, 해당 메서드에 다음과 같이 작성하면 된다.


private void MoisturmMeasurmentProgram_FormClosing(object sender, FormClosingEventArgs e){
        if (!btnStart.Enabled)
        {
            e.Cancel = true;
            notifyIcon1.Visible = true;
            this.Visible = false;
            return;
        }
    }


물론 상황에 따라 저 if안에 검사할 조건을 바꿔야 한다. 나 같은 경우는 btnStart라는 버튼을 활성화, 비활성화 하는것에 따라 프로그램의 작동 상황을 구분하니 이렇게 한 것이고… 물론 이렇게 하면 안된다!

FromClosing 이벤트를 취소하기 위해 e.Cancel = true를 하였고, 시스템 트레이(노티바) 아이콘을 보이게 한 후, 이 From을 보이지 않게 한다.


3.시스템 트레이 아이콘이 숨겨지고 창이 보이게

창을 다시 띄우고 싶을때 해당하는 메서드에 동작을 넣어주면 된다. 소제목도 2번과 반대이고 로직또한 2번과 반대이니 어렵지 않다. 나는 간단하게 시스템 트레이 아이콘을 더블클릭하면 해당 동작이 되게 한다. 그러기 위해서는 시스템 트레이(노티바) 아이콘의 더블클릭 이벤트를 붙혀주면 된다.


이벤트 붙이는거야 뭐 속성에서 이벤트를 더블클릭해서 메서드 생성을 해주던지, 직접 코드에서 붙혀주던지 알아서 하면 된다. 아래는 해당 이벤트 코드이다.

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){
        this.Visible = true;
        this.Activate();
    }



Minny_

,

VirtualBox로 맥 OS X 엘 케피탄 설치하는 방법, How to Install Mac OS X El Capitan on PC on VirtualBox

이 포스팅은 창작글이 아님을 밝힙니다.

이번 포스팅은 http://techsviewer.com/how-to-install-mac-os-x-el-capitan-on-pc-on-virtualbox/ 글을 번역 및 추가 설명하여 작성한 글입니다. 따라서 이 글은 CCL 해제하며, 원작자의 요구에 따라 글은 내려질 수 도 있습니다.

또한, 굳이 이 포스팅을 읽지 않아도, 저 글에 쉽고 자세하게 잘 설명되어 있으며 찾아보면 설치 동영상까지 제공하니 그걸 따라서 보시는것도 추천드립니다.

글에서 셜명되는 파일 및 자료들은 모두 위 링크에서 다운로드 받을 수 있습니다. 제가 직접 다시 배포할 순 없음을 알아주세요.

원 글에서와 제가 맞춰본 방법이 약간 상의합니다. 제가 맞춘 방법은 이텔릭 체로 표시하니 참고하세요. 제 방법은 어디까지나 참고만 하시길 바랍니다.


준비 해야할 사항

PC 최소사양

  • 운영체제 : Windows 7, 8, 8.1, 10 64bit
  • 프로세서 : Intel
  • 메모리 : 3GB 이상
  • 기타 : 가상화 기술(VT-x)

소프트웨어

  • 가상머신 : VirtualBox 4.3.18 또는 5.0이상
  • 이미지파일 : Mac OS X 10.11 El Capitan Retail VirtualBox Image
  • 기타 : 이미지 파일을 풀 수 있는 압축 해제 유틸리티(WinRAR나 7zip 권장)


방법

1. 가상 머신을 만든다.

준비해야 할 사항을 확인하고, 준비할 소프트웨어를 확인하고, 다운로드 받거나 설치해둡니다.




준비가 다 되었다면 가상머신을 생성합니다. 생성할 가상머신의 OS 종류와 버전을 맞추고 메모리 크기는 권장하는 만큼으로 지정합니다. 가상머신의 이름은 후에 가상머신을 CMD로 편집해야 하므로, 주의해서 생성해 주세요.

메모리는 2GB가 기본 권장이긴 하나, 원글에서는 4GB로 셋팅한 모습을 확인할 수 있습니다. 저는 메모리가 부족하여 2GB로만 셋팅하여 진행하였습니다


2. 가상 머신의 상세 설정을 지정한다.

생성된 가상머신을 바로 실행하면 안됩니다. 기본 셋팅이 필요한데,



부팅 디바이스에서 플로피 디스크를 제거하고, 칩셋은 PIIX3로 선택합니다. 앞에 가상 머신을 만들 때 OS 종류를 Mac OS로 잘 맞췄다면 확장된 기능의 I/O APIC 활성화, EFI 활성화, UTP Time 보고 기능이 활성화 되어 있을 겁니다.

역시 설명에는 PIIX3로 선택되어 있고 중요한 부분은 아닐 지 모르겠지만, 인텔 칩셋을 예물레이팅 하는것이 Mac OS에서 호환성 문제를 덜 일으킨다는 의견이 많습니다. 그래서 저는 인텔 칩셋인 ICH9를 예물레이팅 하도록 선택했습니다.



프로세서는 2개 이상으로 선택하고, PAE/NX 활성화는 꼭 하여야 합니다. 역시 마찬가지로 가속에서도 하드웨어 가상화 기능이 꼭 선택되어 있는지 확인해주세요.

운영체제가 Windows 10 이라면 반가상화 인터페이스를 KVM이나 Hyper-V로 선택했을때 가상화 성능이 좀 더 좋으니 저는 반가상화 인터페이스를 KVM으로 선택하였습니다


3. 가상 머신의 하드웨어 이름과 버전등을 수정합니다.

Mac OS는 오직 Mac PC에서만 설치되고 사용하도록 하고 있습니다. 당연히 가상머신이나 일반 IBM x86호환 PC에서는 설치가 안되도록 막혀져 있는데, 이걸 확인하는게 드라이버 이름쪽입니다.



고로 가상머신의 드라이버 이름을 바꿔서 Mac PC라고 인정될 수 있도록 하는 부분입니다. 별건 없고, 위 코드에서 " " 안에 아까 중요하다고 했던 가상머신 이름으로 바꿔 넣습니다. 중요한건 “ “ 안에 적어야 합니다.

저는 가상머신 이름을 Mac OS X 10.11 이라고 지정했으니 위와 같이 입력했습니다. 원 글에 해당 코드가 복사 가능하도록 되어 있긴 하나, CMD에서 일일이 복사 붙혀넣기 하기 귀찮을 수 도 있으니, 제가 bat 파일을 따로 업로드 해 둡니다. 다만 이걸 그대로 실행시켜선 안되며, 꼭 메모장이나 Notepad++등의 유틸리티로 열어 위 설명대로 " " 안에 가상머신의 이름을 넣어준 후 관리자 권한으로 실행하세요.

VirtualBoxSetting.bat


4. 부팅 완료 및 기본 셋팅을 합니다.

이후부터는 제 개인적인 생각으로 셋팅한 것이니 굳이 따라하실 필요는 없습니다. 참고만 하시라는 의미에서 추가로 붙혀두며, 원 글 에서는 이 후 부분은 존재하지 않습니다. 설치 화면을 잘 읽어보시고 어떻게 셋팅할 것인지 본인이 직접 적용해보시는걸 추천드립니다.



부팅 과정 중 별다른 에러 메시지를 띄우거나, 오래동안 화면이 변하지 않는 상황이 아니라면 정상적으로 부팅중인겁니다. 가상머신이니 당연히 느릴 뿐



한참 지나가다보면 Welcome 라는 화면과 함께 국가를 선택하도록 하는데, 이후부터는 각자 알아서 맞춰 셋팅하시면 됩니다. 다만 애플 ID를 입력하거나, 사용기록이나 오류등을 보고하는 항목은 왠만하면 Skip 하거나 비활성화 하는 센스가 있다면 좋겠네요.



셋팅이 다 되면 Setting Up Your Mac… 이라는 화면에서 기다리면 됩니다. 역시 가상머신이니 느린거 바탕화면이 뜨고 Launchpad가 뜨면 사용할 준비는 다 되었습니다.

다만 이게 완전히 끝이 아니라 두가지 정도 추가로 더 해야 하는데, 1. 바탕화면이 뜸과 동시에 뜨는 키보드 셋팅, ISO 102Key표시된 키보드를 선택하거나 기본 가이드대로 하면 됩니다. 2. 시스템이 켜지고 나서 한동안은 계속 가상 하드디스크를 읽고 가상머신이 CPU를 잡아먹고 있을 건데 30분간 놔두라네요. 저는 그냥 귀찮아서 바로 사용할거 사용했지만요


5. 사용하세요.

끝입니다. 이제 사용하시면 되요.


가상머신이니 느리고, 버벅이며, 그래픽 가속은 되지 않습니다.(그래픽 램 설정 높게 줘 봤자 인식하는건 3MB 뿐이고 그래픽 가속 적용해줘봤자 가속 안먹힙니다. 그러니 그래픽 설정은 의미 없습니다.) 다만, CPU 파워만을 필요로 한다면 Host PC의 성능에 따라 넉넉하게 CPU와 RAM을 활당해서 어느정도 사용할만한 환경을 만들 순 있을 거예요.

저는 최근에 iOS 관련한 교육을 받고 있는데, 그래서 한번 Xcode로 iOS에 Hello World를 띄워 봤습니다. 호스트 PC 사양은 intel i7-6500U CPU, 8GB RAM, GeForce 940M(DDR3 2GB) GPU, 120GB SSD, 1TB HDD의 노트북이고 가상 머신에 2GB RAM 활당하고, 가상 하드디스크 파일은 1TB HDD에 설치해 두었구요.

하드디스크 병목 현상이 심해 느린 것, 그래픽 가속이 안되고 비정상적 출력으로 인해 화면이 가끔 깨지는 점, HOST - GUEST OS간 통합 지원이 되지 않아 미묘하게 반응 속도 느린거 제외하면(사실상 전부긴 하지만), 의외로 할 만은 합니다. 하드디스크 병목 현상의 경우 2GB의 작은 RAM 공간을 활당한 상태라 어쩔 수 없이 적극적으로 가상 메모리와 메모리 압축을 많이 쓸태고, 결과적으로 IO가 많이 일어날텐데, 여기다가 5400RPM의 느린 하드디스크에 가상 하드디스크 이미지 파일이 저장되어 있으니 느린건 어쩔 수 없는 상황이라 생각되네요, 메모리를 넉넉하게 주던지, 가상 하드디스크 파일을  SSD등의 빠른 매체에 저장해 두면 상당히 쾌적해 질 거라 생각해요. 일단, iOS 개발이 가능한것 까지 확인하였으니 저는 잘 활용해 보렵니다.




끝.



Minny_

,

Windows 10, 8.1, 8 Home Edition에서 RDP(원격 데스크톱) 서버 기능 활성화하기

개요

Windows Home에서는 원격 데스크톱 연결은 가능한데, 원격 데스크톱 서버 기능은 사용할 수 없어요.

해당 기능은 Windows Pro에서만 사용할 수 있도록 막혀 있는데, 이 글은 Windows Home에서도 원격 데스크톱 서버 기능을 사용할 수 있도록 하는 방법이예요.

이 방법은 Windows 10 Home, Windows 8.1 Home, Windows 8 Home, Windows 7 Stater 버전에서 사용할 수 있어요. 단 Windows 10의 경우는 대규모 업데이트가 진행되면 다시 적용해야 하거나, 적용이 되지 않을 수 도 있으니 참고 바랍니다.


필요하게 되었어요

RDP(원격 데스크톱 프로토콜)에 대해서 아시는 분은 아실겁니다. Windows 자체적으로 제공해 주는 일종의 원격 제어 기능이며 네트워크 연결 상태가 좋으면 왠만하게 성능 잘 나오는게 강점이지요.

물론, 기능도 풍부하고 성능도 좋고, 네트워크 위치에 구애받지 않고도 쓸 수 있는 여러가지 대체제가 있고, 일반적인 용도라면 대체제로 RDP 대신 잘 쓸 수 있습니다. 이 바닥에서 유명한 대체제라면 팀뷰어라는 유틸리티가 있는데, 이녀석은 화면 자체를 그냥 캡쳐떠서 전송하는거라 네트워크와 시스템 성능만 충분하다면 다이렉트X를 사용하는 게임도 플래이 가능하죠. 별다른 네트워크 설정 없이도 쉽게 원격 제어가 가능하다는것도 장점이고… 그래서 잘 쓰고 있지요.


단, 몇가지 문제가 있는데

  1. 팀뷰어는 일단 전반적으로 느려요. 아무리 좋은 인터넷에 연결되어 있어도, 같은 네트워크 안에 있어도 미묘하게 반응이 느립니다.
  2. 또 아무래도 직접 화면을 캡쳐하는 거라 꽤 성능을 많이 잡아먹고 있죠.
  3. 젤 중요한건 라이센스가 필요합니다. 개인용이라면 상관 없지만,,,

뭐 다른 원격 제어 유틸리티들도 상황은 마찬가지겠지요. (물론 원격 제어 유틸리티마다 다를 수 도 있고, 제가 쓰는 팀뷰어는 학교내에서 구매한 라이센스를 쓰고는 있어서 저한테는 1과 2번이 중요한 문제였어요.)

그래서 RDP가 필요하긴 한데,,, 제 노트북은 Windows 10 Home이 설치되어 있어요. 그래서 RDP(원격 데스크톱 프로토콜) 서버 기능이 없는 상황, Windows RDP Server 기능은 Windows Home 버전에서는 제공하지 않으니 원래라면 사용이 불가능했어요.

이거 때문에 Windows 10 Pro 버전 라이센스를 구매할까도 생각했는데, RDP 이거 하나 때문에 업그레이드 라이센스를 지금 사기도 에매하고, 나중에 언젠가는 살거지만, 지금은 다른 방법을 찾아보기로 했어요. 그리고 저는 그 방법으로 RDP Server 기능을 잘 사용하고 있습니다.


어떤 방법인데?

일단 Windows Home 버전은 RDP를 쓸 수 없는거 아니냐? 하면 그건 아닙니다. RDP는 Windows Home 이라도 포함되어 있어요. 원격 데스크톱 연결 자체는 있거든요. Home버전에서 안되는 기능은 RDP Server 기능이고, 이 기능 또한 정확히 말하면 막혀 있는거지 아얘 삭제된 거는 아니예요.

제가 쓰는 방법은 Windows Home에 있는 RDP에 Server를 활성화 하는 방법이예요. 구글링해보면 꽤 많이 돌아다니는데 RDPWrap 라는 녀석이 있습니다. 깃허브에도 올라오고는 하는데, 컴파일 되어서 설치 가능한 건 꽤 구하기 힘들고, 방법 설명도 설명하는 곳마다 꽤 난해하게 적혀 있어서 그냥 제가 한 방법대로 다시 설명드릴게요.


어떻게 하는데?

지금부터는 읽으면서 따라하시면 됩니다. 근데, 혹시나 어떤 문제가 발생했다면 저는 책임지지 않으니까, 미리 백업을 해 두거나, 본인이 이후 일어나는 문제에 대해 해결할 수 있다면 계속 진행하세요.

우선 RDP Server 기능을 활성화 하는 라이브러리를 받아야 되요. 그리고 그걸 시스템 내부에 설치하고 셋팅하는것까지 해야 하는데, 굳이 그렇게까지 힘들게 할 필요는 없고 마우스 클릭 몇번으로 할 수 있도록 쉽게 패키징 되어 있습니다. 그게 RDPWrap라는 프로그램이예요.

RDPWrap-v1.6.zip

이걸 다운로드 받고 압축을 풀면 안에 뭐 이것저것 많은데, 간단합니다. install.bat을 실행해서 설치를 해 줍니다.

왠만하면 이것만 해도 RDP Server가 활성화 되는데, 간혹 시스템마다 활성화가 안되는 경우가 있으니까 RDPConf.exe를 실행해서 뜨는 창에 Listener state가 Listening[fully supported] 라고 되어 있는지 확인해보세요. 이게 뜬다면 RDP Server가 활성화 된거고, 아니라면 라이브러리와 서비스는 설치가 되었는데 작동하지 않는 상황입니다.

만약 Listening[fully supported]가 뜨지 않는다면 , 안에 있는 update.bat를 실행해서 진행된 후 다시 한번 RDPConf.exe를 실행해서 Listener state를 확인해보세요. 물론 모든 bat 파일은 관리자 권한으로 실행해야 합니다.

설치가 완료된 것 같다면, RDPCheck.exe를 실행해서 로컬로 직접 확인해보거나 다른 PC에서 해당 PC에 RDP로 연결해 봅니다. 저는 넷북에서 직접 연결 시도 해봤는데, 정상적으로 잘 연결된 걸 확인할 수 있었어요.



정식 기능이랑 차이점은?

아무래도 Windows Home에서는 지원하지 않는거라, 윈도우 자체 설정에서는 원격 데스크톱 연결 기능을 설정할 수 없습니다.

그래서 RDPConf.exe라는 프로그램을 제공해주는거예요. Windows Pro에서 설정 가능한 RDP Server 설정을 이 프로그램을 통해 대신하는거죠. 멀티 유저 연결이나 보안 권한 설정도 할 수 있으니까, 이 프로그램은 어디 간직해 뒀다가 필요하면 셋팅하면서 사용하면 됩니다.


그 외 Windows Pro에 포함되어 있는 RDP Server 기능이랑 기능차이는 전혀 없으니까, 이대로 써도 될 것 같아요. 윈도우 10에서 대규모 업데이트가 있다고 하면 혹시 모르니 uninstall.bat을 사용해서 RDPWrap을 제거한 후 윈도우 10 대규모 업데이트 적용 하고 다시 설치하는걸 추천해요.

끝!


Minny_

,

엔비디아 지포스 드라이버 일부 840M, 940M 설치 불가 문제 해결 방법

개요

이 문서에서는 엔비디아에서 공식 배포되는 드라이버 패키지가 일부 840M, 940M 그래픽 칩셋을 가진 장치에서 설치되지 않는(“이 그래픽 드라이버는 호환되는 그래픽 하드웨어를 찾지 못했습니다”) 문제에 대해 원인 분석과 수정한 드라이버 패키지를 배포합니다.

대상

시스템은 HP Pavilion 14 n266tx 이며, 해당 시스템에는 지포스 840m 그래픽 칩셋이 포함되어 있습니다. 드라이버는 현재까지 해당 문제가 확인되는 Windows 10 x64 용 드라이버 패키지중 현 시점 최신버전(361.43)을 기준으로 합니다.




다른 윈도우 버전용 드라이버 패키지 중에서도 해당 문제가 발생하면 동일한 방법으로 적용이 가능하며, 위 시스템 외에도 지포스 840m이나 940m에서 최신버전의 드라이버를 설치하려 할 때 “이 그래픽 드라이버는 호환되는 그래픽 하드웨어를 찾지 못했습니다” 라는 메시지가 뜨고 설치가 진행되지 않다면 확인해보세요.


840m 940m 말고도 다른 엔비디아 지포스 그래픽을 가진 시스템에서 드라이버가 위와 같은 에러로 설치되지 않는다 해도 이 글을 확인해보세요.

원인

일부 840m, 940m을 위한 그래픽 드라이버가 353.62 버전 이후로 빠져 있는것을 확인하였습니다. 아래 그림1 은 353.62 드라이버 패키지 파일 중 nvhmi.inf 파일과, 그 이후 드라이버 패키지 파일에서의 nvhmi.inf을 비교한 사진인데, 아래와 같이 최신버전의 드라이버 패키지에서 비어있는 하드웨어 ID 4가지를 확인할 수 있었습니다.

  • DEV_1341 / SUBSYS_2165103C
  • DEV_1341 / SUBSYS_2166103C
  • DEV_1341 / SUBSYS_21DB103C
  • DEV_1347 / SUBSYS_80DB103C

해당 ID를 가진 840M과 940M은 드라이버 패키지 안의 inf파일에 드라이버가 정의되지 않았기 때문에 드라이버 설치 프로그램에서 확인이 되지 않고 설치가 진행되지 않는 것입니다.



위에 언급된 하드웨어 ID 외에도 다른 장치에서도 똑같이 뜬다면, 1. 해당 장치의 하드웨어 ID를 확인하고, 2. 해당 장치에서 설치가 가능한 버전을 찾고, 3. 설치가 가능한 버전의 드라이버 패키지와 설치가 되지 않는 최신 버전의 드라이버 패키지 안의 inf 파일들을 찾아 4. 장치의 하드웨어 ID를 기준으로 찾아보시기 바랍니다.

해결

궁극적인 해결 방법은 엔비디아측의 공식 드라이버가 배포되기 전까지 별다른 방법이 없습니다. 우선 한국 엔비디아 커뮤니티에 문의 글을 올려둔 상황이니 진행사항에 따라 글을 수정합니다. 현재로써는 문제가 되는 해당 inf 파일을 수정하여 임시로 해결 가능합니다.


설치가 가능한 구 드라이버에서 비어있는 하드웨어 id를 설치할 드라이버의 inf에 맞춰서 넣어주면 됩니다. 이 때 중간부분에 해당 ID는 어느 섹션의 드라이버 패키지로 설치할 것인지([NVIDIA_Devices.NTamd64.10.0] 부분) 지정해 주고, 맨 밑부분에 하드웨어 ID에 따른 드라이버 이름을 지정하는 곳에([Strings]) 넣어주고 저장한 후 다시 설치 프로세스를 실행해 보세요.



참고

inf파일을 수정한 후 설치 프로세스를 시작하면 정상적으로 설치 프로세스가 진행되는 것으로 보이나 설치 과정 중 실패할 수 있습니다. 이는 위에서 수정하여 추가한 하드웨어 ID에 대한 Windows의 드라이버 서명이 존재하지 않아 시스템에서 설치를 중단시키는 것입니다.


고급 부팅 옵션에서 드라이버 서명 사용 안함 옵션으로 부팅한 후 설치를 다시하게 되면 아래와 같은 메시지를 확인할 수 있습니다. 서명을 무시하고 게속 설치하도록 하면 정상적으로 설치가 가능합니다.





수정 패키지 배포

저도 이 문제 때문에 해결법을 찾고 있었기 때문에 위의 방법으로 만들어보았습니다. 일단 제가 필요해서 만들었기 때문에 다른 그래픽 칩셋에서 동일한 문제는 따로 해결하고 추가 배포할 생각은 없습니다.(심심하면 할 것 같습니다)


이 문서에서 업로드하는 파일은 두가지입니다.

  • 위의 방법으로 수정한 inf 파일
  • 위의 방법으로 수정한 inf을 포함하는 361.43 드라이버의 자동 압축 풀림 패키지 파일

기존에 드라이버 패키지를 받으셨다면 inf 파일만 받으시고 드라이버 패키지가 풀린 곳에 적용시키면 됩니다. 기본 경로는 C:\에 엔비디아라는 풀더로 되어 있으며 안에 들어가면 드라이버 버전으로 풀더가 있고, 그 안에 디스플래이 드라이버라는 풀더가 있는데 이 안에 넣어주세면 됩니다. 해당 inf파일은 361.43 을 기반으로 수정하였으므로, 다른 버전 드라이버에서는 적용되지 않을 수 있습니다.


드라이버 패키지를 받으시지 않으셨다면 수정한 inf파일을 포함하는 자동 압축 풀림 패키지 파일을 다운로드 받으시면 됩니다. 드라이버 버전은 361.43이며 위의 inf파일을 적용 한 것 외에 추가적인 작업은 하지 않았습니다. 압축을 푸실때 경로 그대로 하시길 추천하며(자동으로 설치 프로그램을 시작할겁니다), 드라이버를 재패키징 하여 배포하는것은 라이센스 문제가 있을 수 있으므로 패키지는 이번 버전만 배포합니다.


추가적으로 이 후 버전도 똑같은 문제가 있을 경우 inf파일만 추가적으로 수정하여 배포 할거고, 공식적으로 문제가 해결된다면 배포를 중단합니다.

2016년 9월 3일 추가

 

대용량 파일이라 패키지 파일을 NAS에 업로드하여 링크로 제공하고 있었습니다. 그러나 NAS과 네트워크 관련 작업으로 인해 더이상 제공은 힘들 듯 하네요. 또한 굳이 패키지 파일을 배포할 필요성은 못느껴서 더이상 패키지 파일은 배포 중단합니다.

위의 방법으로 직접 적용하시는걸 추천드려요. 


다운로드

INF 파일 : nvhmi.inf
드라이버 패키지 파일 : NVIDIA GeForce Driver for 840940m.exe


Minny_

,