프로그래밍 중 주로 사용하는 에디터는 UltraEdit였다.
많은 개발자들이 사용하고 있는 유명한 에디터이긴 한데, 회사 노트북에 설치하긴에 상용이라는 점이
그동안 껄끄러웠던 바 공개 소프트웨어 중 쓸만 놈이 없나 찾던 중 Notepad++ 란 놈을 알게 됐다.
(회사에서 UltraEdit를 구매해서 사용중이긴 한데, 업데이트된 버전을 사용하긴 위해선 라이센스를
갱신해야 했다.)

0. 제품 홈페이지
http://notepad-plus.sourceforge.net/

1. 설치
http://sourceforge.net/projects/notepad-plus/ 에서 설치파일을 다운로드 받는다.
이 글을 작성하는 시점의 최신 버전은 5.6.7 이었다.

2. 플러그인 설치
플러그인 홈페이지: http://sourceforge.net/projects/npp-plugins/
플러그인 리스트: http://sourceforge.net/projects/npp-plugins/files/

2-1. Function List
소스 파일의 함수 목록을 볼 수 있는 플러그인 설치한다.
다운로드 받은 FunctionList_2_1_UNI_dll.zip 파일의 install.txt를 참고하면 된다.
(제품 홈페이지의 플러그인 사이트로 들어가서 2.0 버전을 설치하거나 PluginManager로 설치하면 2.0 버전이
설치되는데 2.0버전이 설치되면 Notepad++가 실행되지 않습니다. 2. 플러그인 설치에 적은 플러그인 홈페이지에서 2.1 버전을 설치하여야 합니다.)

2-2 PluginManager
Notepad++ 5.6.7 설치파일로 설치하면 0.9.3.0 버전이 설치되어 있습니다.
0.9.3.1 버전으로 업그레이드 합니다.
(업그레이드해도 별반 달라지는 건 없습니다. --; 업그레이드 안 해도 될 것 같습니다.)
점심 먹구 웹서핑을 하던 중 MS Windows 호환 공개 OS가 있는 걸 알게 되었습니다.
이름은 ReactOS. 오픈 소스 형태로 개발되고 있으며 공식 사이트는 아래와 같습니다.

아래는 공식 홈페이지에 있는 ReactOS 소개글입니다. 아직은 알파 버전 단계정도이라고 하니, 발전해 가는 모습을 지켜보는 것도 재미있을 듯 합니다.
ReactOS® 는 Microsoft Windows® XP와 호환성이 있는 자유 공개 소스 운영체제입니다. ReactOS는 Windows NT, XP 운영체제와의 완벽한 어플리케이션, 장치 드라이버 호환성을 제공하는 것을 목표로 하고 있습니다. 이것은 Windows와 비슷한 아키텍쳐를 사용하고, 완전하며 동등한 외부 인터페이스를 제공함으로써 이루어집니다.

ReactOS는 현존하는 Windows형 운영체제 중 가장 완전한 구동 모델입니다. 따라서, 프로그래머들은 ReactOS 소스 코드를 공부하거나 심지어 ReactOS 개발에 참여할 수도 있으며, 이를 통해 많은 것을 배울 수 있습니다.

ReactOS는 계속해서 새로운 버전의 기능들을 추가하고 있으며, 때로는 정상급의 운영체제 기술을 새로 쓰기도 합니다.

즉, ReactOS는 여러분의 어플리케이션을 실행하고 하드웨어를 사용하는 것을 목표로 하는, 여러분을 위한 무료 운영체제입니다!

ReactOS 0.3.9 은 아직 alpha 단계에 있다는 것을 기억해 주세요. 아직 기능이 완전하지 않고, 일상적으로 사용하기에는 알맞지 않습니다.

일단 구경부터 하면, 아래는 설치화면과 초기화면, 오픈 오피스 실행화면 캡쳐화면입니다.
대략적인 화면은 MS Windows 2000 UI와 비슷합니다.


출처: IDG(http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=53080)

비스타가 기업으로부터 외면 당한 가장 큰 이유는 바로 기존의 애플리케이션과 호환되지 않는다는 것이었다. 마이크로소프트는 바로 이 문제를 해결할 수 있는 툴의 공개 베타 버전을 처음으로 공개했다.

MED-V(Microsoft's Enterprise Desktop Virtualization)는 가상화 기술을 이용해 윈도우 2000이나 윈도우 XP용으로 개발된 기존 윈도우 애플리케이션을 윈도우 비스타 상에서 실행할 수 있다.

MED-V 수석 제품 관리자인 랜 오엘가이저는 “우리의 최우선 목표는 IT 부서가 새로운 운영체제로의 마이그레이션 과정에서 부딪히게 되는 애플리케이션 호환성 문제를 해결할 수 있는 기업용 가상화 솔루션을 제공하는 것”이라며, “MED-V 1.0을 사용하면, 가상 윈도우 2000/XP 환경을 쉽게 생성해 배포할 수 있으며, 이를 통해 최종 사용자가 윈도우 비스타 데스크톱에서 기존 애플리케이션을 구동할 수 있다”고 설명했다.

이런 식으로 사용자가 굳이 새로운 운영체제를 도입하기 전에 호환성을 테스트하거나 애플리케이션을 마이그레이션하지 않아도 된다는 것이 장점이다. MED-V 베타는 현재 마이크로소프트 커넥트 사이트에서 배포하고 있다.

MED-V의 최종 버전은 올해 후반기에 발표될 예정이다. 마이크로소프트는 MED-V 관련 기술을 지난 해 5월 키다로(Kidaro) 인수를 통해 확보한 것으로 알려졌다. 실제로 MED-V는 마이크로소프트의 데스크톱 최적화 팩이란 더 큰 소프트웨어 패키지에 포함되어 있으며, 이들 대부분은 마이크로소프트가 가상화 부문 전문업체의 인수를 통해 확보한 것이다. 키다로 외에도 소프트리시티(Softricity), 어셋매트릭스(AssetMetrix), 윈터널 소프트웨어(Winternals Software), 데스크톱스탠더드(DesktopStandard) 등이 대표적이다.

마이크로소프트는 비스타 출시 이후 크게 불거진 호환성 문제를 해결하기 위해 데스크톱/애플리케이션 가상화 기술에 적지 않은 투자를 하고 있다. 실제로 많은 기업에서 윈도우 비스타를 건너뛰고, 윈도우 XP를 끝까지 사용하다 윈도우 7으로 옮겨가려는 데에도 애플리케이션 호환성 문제가 가장 큰 영향을 미친 것으로 분석된다.  elizabeth_montalbano@idg.com


Visual Studio 6.0 에서 개발한 프로젝트에 XP Theme가 먹도록 하려면 실행파일에
manifest를 추가하여 한다. 또한, Vista에서 권한 상승이 되어 실행되도록 하려고 해도
마찬가지로 manifest가 추가되어야 한다. 아래는 이러한 manifest에 대한 정리이다.

1. 실행파일명.manifest로 텍스트 파일을 만든다.
2. manifest 파일의 내용은 다음과 같다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity
      name="Microsoft.Windows.application"
      processorArchitecture="x86"
      version="1.0.0.0"
      type="win32"/>
   <description>Application description here</description>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
         />
      </dependentAssembly>
   </dependency>
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
         <requestedPrivileges>
            <requestedExecutionLevel
               level="requireAdministrator"
               uiAccess="False"/>
         </requestedPrivileges>
      </security>
   </trustInfo>
</assembly>


3. rc 파일에 다음을 추가한다.

#define MANIFEST_RESOURCE_ID 1
MANIFEST_RESOURCE_ID RT_MANIFEST "application.exe.manifest"

Windows XP 사용중 서비스 팩 3 설치 후 윈도우즈 업데이트 설치시 다운로드는 정상적으로
실해되지만, 설치시 실패가 발생하는 현상이 생겼다. 다음은 인터넷에서 찾은 윈도우즈 업데이트
실패 해결 방법이다. 실제로 적용해보니 잘 해결되었다.

1. net stop wuauserv
2. regsvr32 %windir%\system32\wups2.dll
3. net start wuauserv

다시 윈도우즈 업데이트를 실행하면 업데이트가 잘 진행될 것이다.

문제 또는 증상

일부 인스턴스에서는 iTunes 및 QuickTime 인스톨러를 설치하려고 준비하는 단계에서 다음과 같은 메시지가 나타나면서 갑자기 종료됩니다.

"패키지 설치 시 인스톨러에 예기치 못한 오류가 나타났습니다. 이 패키지에 문제가 있을 수도 있습니다. 오류 번호는 2738입니다."

다음과 같은 메시지가 나타나는 경우도 있습니다.

"Visual Basic Script (VBScript)이 설치되어 있지 않거나 사용할 수 없으므로 iTunes를 설치할 수 없습니다. VBScript가 설치되어 있는지 확인한 다음, 안티 바이러스 차단 및 개인 방화벽 소프트웨어를 끄고 VBScript를 다시 등록한 뒤 iTunes를 설치하십시오."

해당 제품
  • iTunes 7.0 이상
  • QuickTime 7.1.3 이상
  • Windows XP

    해결 방법

    Windows용 iTunes 및 QuickTime 인스톨러는 Microsoft에서 제공하는 "Windows Installer"라는 기술을 사용합니다. Windows Installer 기술이 iTunes 및 QuickTime에 내장된 Visual Basic Script를 처리하지 못하는 경우에 이런 오류가 발생합니다. Microsoft에서 최신 VBScript 엔진을 설치하면 이 문제를 해결할 수 있습니다.

    VBScript가 설치되어 있더라도 Windows에서 등록이 되지 않은 경우도 있습니다. VBScript 엔진을 다시 다시 활성화하려면 다음 절차를 따라하십시오.

    1. 시작 메뉴에서 실행을 클릭합니다.
    2. "열기" 창에 아래와 같이 입력하고 확인을 클릭합니다.
      regsvr32 %SystemRoot%\system32\vbscript.dll
    3. "C:\WINDOWS\system32\vbscript.dll의 DllRegisterServer 성공"이라는 메시지가 나타납니다.
    4. 확인을 클릭한 다음 iTunes 또는 QuickTime을 다시 설치합니다.

    사용자는 관리자로 로그인해야 하거나 위 안내 사항을 실행할 수 있는 관리자 권한을 가지고 있어야 합니다.

    출처: http://docs.info.apple.com/article.html?artnum=304405-ko


    ① CD 이미지로 만든 부팅 디스크로 부팅

    ② 스카시가 있는지에 따라 선택

    ③ "Set passwords"를 선택

    ④ SAM 화일이 있는 경로를 물어오는데 디폴트는 nt나 2000은 "winnt/system32/config"
    XP는 "windows/system32/config” XP인 경우는 해당 디렉토리 경로를 바꿔어 주어야 함.

    ⑤ Do you really wish to disable SYSKEY? 라고 물어보는데 반드시 노(no)

    ⑥ 암튼 노(n)하면 암호를 바꿀 계정을 물어보는데, 당연히 어드민 암호를 바꿔야 하니까
    [Administrator]..기냥 엔터. 그런다음 암호를 바꿔주시고,

    ⑦ Do you really wish to change it? => y

    ⑧ Calling write.rc to select write back sam file About to Write file(s)back! Do it? => y

    ⑨ 맨 마지막보면 # 만 뜨는 프롬프트가 뜨는데 이것은 리눅스와 같은 상태.

    ⑩ 여기에서 화면에 설명된데로 디스켓을 빼고 CTRL+ALT+DEL를 누르고 재부팅하고 새로운 암호로 로그인하면 성공

    http://home.eunet.no/pnordahl/ntpasswd/

    윈도우즈 서버 2008에 새로 추가된 기능인 Hyper-V는 x64 버전에서만 지원됩니다.
    x86 버전에서는 역할 추가에 메뉴가 없습니다. 아래는 도움말에서 퍼온 내용입니다.

    Hyper-V™에는 다음과 같은 특정 하드웨어가 필요합니다.

    • x64 기반 프로세서. Hyper-V은 x64 기반 버전의 Windows Server 2008(특히 x64 기반 버전의 Windows Server 2008 Standard, Windows Server 2008 Enterprise 및 Windows Server 2008 Datacenter)에서만 사용할 수 있습니다.
    • 하드웨어 지원 가상화. 가상화 옵션을 포함하는 프로세서(특히 Intel VT 또는 AMD-V(AMD Virtualization, 이전 코드 이름은 "Pacifica"))에서 사용할 수 있습니다.
    • 하드웨어 DEP(Data Execution Protection)가 사용 가능하고 활성화되어야 합니다. 특히 Intel XD 비트(execute disable bit) 또는 AMD NX 비트(no execute bit)를 사용해야 합니다.

    Hyper-V에 대한 자세한 내용은 Windows Server 2008 TechCenter(http://go.microsoft.com/fwlink/?LinkId=93752)(페이지는 영문일 수 있음)를 참조하십시오.

    출처: Windows Server 2008 x64 Std. 도움말

    예를 들어 app.msi 파일을 C:\Temp 폴더에 압축을 푼다고 하면.
    msiexec /a app.msi targetdir="C:\Temp" /qn
    자세한 옵션은 msiexec /? 로 확인하면 된다.
    dll 에서는 PretranslateMessage 안으로 들어오지 않습니다. 자세한것은 잘 모르겠지만 winmain 과 dllmain 과의 message pump 가 달라서 그런듯 합니다.
    비슷한 이유로 dll 에서 dll 내의 리소스를 쓰고자 할때도 AfxGetStaticModuleState 를 해주어야 하지요.
    저같은경우는 dll 에서 가속키를 쓰려고 하는데 잘 안되서 찾아보니 아래와같이 해주니 되더군요.
    dll 내에다가 translatemessage와 onidle 함수를 노출시키고

    //main app에서
    BOOL CXXXApp::OnIdle(LONG lCount)
    {
        // TODO: Add your specialized code here and/or call the base class
        if (CWinApp::OnIdle(lCount))
            return(TRUE);
     
        ProcessDllIdle();
     
        return(FALSE);
    }

    BOOL CXXXApp::PreTranslateMessage(MSG* pMsg)
    {
        // TODO: Add your specialized code here and/or call the base class
        if (CWinApp::PreTranslateMessage(pMsg))
            return(TRUE);
     
        return(FilterDllMsg(pMsg));
    }

    // dll 에서
    BOOL FilterDllMsg(LPMSG lpMsg)
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        TRY
        {
            return AfxGetThread()->PreTranslateMessage(lpMsg);
        }
        END_TRY
       
        return FALSE;
    }

    void ProcessDllIdle()
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        TRY
        {
            // flush it all at once
            long lCount = 0;
            while (AfxGetThread()->OnIdle(lCount))
                lCount++;
        }
        END_TRY
    }


    자세한건 ms-help://MS.MSDNQTR.2004JAN.1033/vclib/html/_MFCNOTES_TN011.htm 여기를 참고하시고
    MFC 예제중에서 DllScreenCap 을 참고하세요.

    + Recent posts