프로그램에서 발생하는 에러를 이벤트 로그를 남기려고 아래와 같이 이벤트 로그에 접근하니 windowEventLog = Log; windowEventLog.Source = SourceName; windowEventLog.Log = LogName; if (!EventLog.SourceExists(SourceName)) EventLog.CreateEventSource(SourceName, "Application"); System.Security.SecurityException 오류가 발생했습니다. 위 5 번째 줄에서 원본 여부를 존재 여부를 확인할때 오류가 발생합니다. 검색해보니 EventLog.SourceExists 함수에서 EventLog\Security 에 접근하게 되는데 관리자 권한 이 없을 경우에 오류가 발생한다고 합니다. 이 경우에는 레지스트리에 SourceName 으로 키를 생성해주면 오류가 발생하지 않는다고 합니다. Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SourceName] 위 내용을 .reg 파일로 생성해서 실행시켜주면 됩니다.
예전부터 응용 프로그램에 Python을 결합하여 즐겨 사용했는데, 어떤 사용자의 요구사항 때문이었습니다. 그 사용자가 사용하는 프로그램에 계산식이 있는데 계산식이 프로젝트의 특성때문에 조금씩 수정해야 한다는 것이었습니다. 프로젝트마다 계산식을 수정해서 프로그램을 배포하기가 어려워 계산식 자체를 Python 코드로 외부 파일로 빼내는 방식으로 처리했습니다. 어느날 차를 몰고 가는데 전화가 와서 이번 프로젝트에서는 factor 3을 3.5로 바꿔야 하는데 어떻게 하나요? 라고 문의가 왔습니다. Python 파일을 열어 숫자 3을 3.5로 바꾸면 된다고 답변을 해줬습니다. 이렇게 사용자는 프로젝트마다 Python에서 계산식을 수정하여 사용하면 되기 때문에 프로그램을 수정할 필요가 없어집니다. 이전 글 에서도 이야기했듯이 IronPython은 C#과 궁합이 아주 좋아 이번 프로젝트에서도 IronPython을 프로그램에 포함시켰습니다. 자동으로 생성된 배관 라인을 수정하거나 새로 생성하는 기능을 위해 IronPython을 활용했습니다. 먼저 앱 실행 경로를 IronPython 검색 경로에 추가해줍니다. 1 2 3 4 5 6 #region IronPython의 검색 경로에 앱 실행 경로를 추가 var paths = _IronPython.GetSearchPaths(); var ExecutePath = System .IO.Path.GetDirectoryName(Application.ExecutablePath); paths.Add(ExecutePath); _IronPython.SetSearchPaths(paths); #endregion Colored by Color Scripter cs 아래와 같이 C# Class를 정의하고 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class MoveTo { public MoveTo(PythonTuple value) { int