본문 바로가기

Dev::DotNet/C#

(15)
Windows Version 구분 참고자료 : HOWTO: Visual C# .NET을 사용하여 Windows 버전 확인 이런것 저런거 하다보니... Windows XP 와 7 에서 다르게 동작하는 것이 있어서 OS Version 에 따라서 분기를 태우려고 하다보니...OS Version 을 구분해야 했다. MS 에서 제공해주는 위의 참고자료를 보면 아~주~ 잘 나와있다. 하지만 정작 내가 필요한 7 이 없어서....아주 약간의 사설을 더해 보았다. 앞으로 새로운 Windows 가 나오면 계속 추가를 해줘야하는 약간의 번거로움이 있다.
System.Environment.CurrentDirectory 의 경로 System.Environment 에는 아래와 같이 "현재 작업 디렉토리의 정규화된 경로" 를 가져오는 System.Environment.CurrentDirectory 가 있다. 나는 현재 실행되는 프로그램의 경로를 가져올 때 흔히 사용하였다. 사용하다 보니 약간의 문제가 있었다. 예시로 System.Environment.CurrentDirectory 를 메시지 박스로 출력하는 간단한 테스트 소스이다. 해당 프로그램을 바탕화면 ( C:\Users\Administrator\Desktop ) 놓고 실행해보았다. 당연히 아래와 같이 메시지가 보이게 된다. 그리고 다음으로는 cmd 창에서 C:\ 에서 실행해보았다. 결과는 이렇게 나왔다. System.Environment.CurrentDirectory 은 프로그..
Assembly 의 Version 을 날짜로 바꾸기 AssemblyInfo.cs 의 [assembly: AssemblyVersion("1.0.0.0")] 을 [assembly: AssemblyVersion("1.0.*")] 로 변경하면 "1.0.4598.17304" 형식으로 자동으로 버전이 증가하게 되고 System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() 를 통해서 버전값을 가져올 수 있다. Version 값의 증가는 대충봐도 중간 4자리 ( 4598 ) 은 하루에 하나씩 증가하고 마지막 5자리 ( 17304 ) 는 하루를 기준으로 증가하게 된다. 시간에 따라서 증가는 값이기 때문에 역으로 시간으로 바꿀는 방법을 생각해보았다. string[] ver = System...
네트워크 폴더 접속 Windows Network folder 를 오픈하는 방법은 그냥 net use 명령어를 배치파일로 떨궈서 실행시켜 오픈하는 방법과 API 를 통해서 오픈하는 방법이 있다. > net use 명령어를 배치파일로 만들어 실행하는 방법 string batPath = System.Environment.CurrentDirectory + @"\NetworkDrive_Connect.bat"; string netStr = @"net use " + NDServerPath + " /User:" + NDUserID + " " + NDPassword; using (FileStream fs = new FileStream(batPath, FileMode.Create)) { System.Text.ASCIIEncoding enco..
실수를 정수로 형변환 할때 지극히 기본적이면서 당연한 이야기지만 내가 예전에 했던 커다란 실수에 대해서 적어볼까 한다. C# 에서는 Convert 라는 각종 기본 자료형의 값을 형변환하는 클래스를 제공하고 있다. Convert 관련 MSDN : http://msdn.microsoft.com/ko-kr/library/dsfy6sz9 또한 예전처럼 b = (int)a 이런 식으로 형변환자를 통해서도 가능하다. 예전에 Zoom Factor 의 변경에 의한 Child 의 Location 과 Size 를 재조정하기 위해 약간의 계산식을 만드는데 ZoomFactor 는 실수(float, double) 였고 Location 과 Size 는 정수(int...) 였다. 아무 생각없이 실수를 정수로 형변환하면서 위의 2가지 방법을 혼용해서 사용하였..
다중 실행 방지를 위한 Mutex 하나의 프로그램이 두개 이상의 프로세스가 실행되지 않게 해야할 때가 있다. 나의 경우에는 여러 프로그램들이 프로그램 A 를 계속 Shell 로 호출하기 때문에 A 가 하나의 프로세스만 실행되어 있고 그 뒤에 실행되는 A의 다른 프로세스 들은 자기가 Shell 로 넘겨받은 파라매터만 처음 실행된 프로세스에게 전달해주고 자신은 죽어버리는 그러한 것이 필요했다. 찾다보니 여러 방법들이 있었는데.... 그 중 다중 프로세스 실행 방지 를 위한 방법중 가장 심플한 방법은 Mutex 를 이용한 방법인 것 같다. bool IsCreateNew; using (System.Threading.Mutex m = new System.Threading.Mutex(true, "ProccessName", out IsCreateNe..
Unhandled Exception 에 대한 처리 Exception 처리를 하지 않은 부분에서 예외가 발생하여 프로그램이 죽어버리는 경우가 종종 발생한다. 최대한 예외처리를 해서 그런일이 발생하지 않게 하는 것이 가장 좋은 방법이지만... 사람인지라.... 그래서 찾아보니 Unhandled Exception 을 잡아낼 수 있는 방법을 닷넷에서 제공하고 있었다. Winform / WPF 는 좀 다르긴 하지만 처음에 Application 을 통해서 시작하는데. Winform 은 아래의 event delegate 를 사용하여 가능하며 System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadExceptio..