기본 콘텐츠로 건너뛰기

라벨이 .NET Framework인 게시물 표시

[ MySQL ] Windows 8.1 환경에서 Workbench 실행할 때 오류가 발생하는 경우

  윈도우 8.1 을 설치하고 설치 버전이 아닌 포터블 버전의 MySQL Workbench 를 실행하면 (x64, x86 모두) 오류가 발생하는 경우가 존재한다. .NET 환경의 개발자라면 이런 상황은 발생하지 않을 수 있지만 Java 개발 환경이라면 이 오류가 발생할 수 있다.   오류 원인은 MySQL Workbench의 기본 환경 요소 때문에 발생하는데 별다른 설명이 없이 그냥 오류나면서 끝나 버린다. -_-;;; Workbench 실행에 필요한 기본 요소는 다음과 같다. (이 부분은 MySql Workbench 다운로드 사이트  Prerequisites 에 설명되어 있다) Microsoft .NET Framework 4 Client Profile - 이 부분은 Windows 8.1 설치 시에 기본으로 설치되므로 직접적인 원인은 아니다. Visual C++ Redistributable for Visual Studio 2013 - .NET 개발 환경이라면 Visual Studio를 설치했으므로 문제가 되지 않지만 Java 개발 환경이라면 이 부분이 없을 가능성이 높기 때문에 여기서 다운로드 해서 설치를 하면 된다.   얼마 전부터 Java 개발을 하면서 .NET 개발 환경 구성을 하지 않다가 보니 항상 만나는 문제인데, 정리를 해 놓지 않으니 항상 까먹고 원인을 찾겠다고 똑같은 뻘짓을 계속 하고 있다. ㅠㅠ 이휴~   참고로 내 PC 에 .NET Framework이 설치되어 있는지를 확인하는 방법은 Registry  Editor 에서 아래와 같은 키 정보를 확인하면 된다.  여기 사이트 를 참조하면 내용과 다른 방법에 대해서 알 수 있다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

[.NET 일반] BadImageFormatException 오류 처리하기.

주로 많이 발생하는 상황은 64Bit O/S 에서 32Bit 플랫폼으로 개발된 어셈블리를 사용할 경우이다. 물론 소스코드가 존재하는 경우는 플랫폼 대상을 x64로 변경하거나 AnyCPU 로 설정해서 재 컴파일하면 된다. 문제가 되는 것은 외부의 DLL을 가져다 쓰는 경우인데, 지금처럼 Oracle.DataAccess.dll 을 가져다 쓰는 경우처럼 소스가 없는 경우는 대략 난감한 상황에 빠지게 된다. 아래와 같이 개발 또는 수행 환경에 따라서 적절하게 적용하면 된다. IIS 에서 운영되는 웹 어플리케이션 인 경우 IIS 사이트의 Application Pool 의 고급 설정에서 “Enable 32 Bit Applications” 설정을 true 로 변경해 주면 된다. 윈도우 어플리케이션인 경우 현재까지 파악된 것으로는 32Bit Solution으로 처리하고  64Bit Machine 에서 동작하는 경우를 생각하거나 그렇지 못할 경우는 32Bit DLL을 COM으로 Wrapping해서 사용하는 것의 2가지 방법 뿐이 없는 것 같다. 결국은 Oracle 사이트에서 64Bit 용 ODAC를 받아서 64Bit 용 DLL을 사용하는 것으로 적용하는 것으로 결정하였다.  

C# 에서 Timer 사용할 때 주의할 점.

예전에 알고 지내시던 분의 질문을 받았다. Windows Forms 개발을 하는데, 주기적 (대략 1분)으로 데이터 요청을 하는 프로그램을 작성하기 위해서 Timer 를 사용하는데, 어떤 기능을 처리해야 하기 때문에 Sleep 을 같이 사용했다고 한다. 여기서 발생하는 문제는 Sleep 5초를 주었더니, Timer 까지 5초 동안 멈춘다는 것이다. Timer 라는 것은 기본적으로 시간의 흐름을 측정하는 기능이기 때문에 Sleep 을 했다고 해서 Timer 가 멈추는 일은 생겨서는 안된다. 그러나 실제 샘플을 만들어 보면 ... Timer 가 Sleep 만큼 동작이 멈추는 것을 확인할 수 있다. Windows Forms 는 UI Thread 를 사용하는 것으로 최적화 되어 있으며 여기서 Timer 를 쓰면 UI Thread 에 최적화된 System.Windows.Forms.Timer 가 사용된다. 여기서 문제의 발생이 시작되는 것이다. Sleep 을 사용하게 되면 UI Thread 가 Sleep 이 걸리기 때문에 여기에 속한 Timer 까지도 멈추는 것이다. 이런 문제를 해결하기 위해서는 System.Threading.Timer 를 사용해야 한다. 이 Timer 는 별도의 Thread 에서 동작하기 때문에 Sleep 의 영향을 받지 않는다. 언뜻 보면 쉬운 해결 방법인 것 같지만 Thread 가 분리되었기 때문에 Timer 가 돌아가는 Thread 에서 UI Thread 의 메서드나 컨트롤에 접근하기 위해서는 별도의 명령을 사용해야 하는 문제가 존재한다. 자~ 그럼 여기서 Timer 에 대해서 다시 한번 정리해 보도록 하자. .NET 에서 제공하는 Timer 들 .NET 에서는 기본적으로 3가지 Timer를 제공하고 있다. (MSDN) System.Windows.Forms.Timer - 사용자가 지정한 간격마다 이벤트를 발생시키며 Windows Forms 응용 프로그램에서 사용할 수 있도록 최적화 되어 있다. System