system32 , sysWOW64 의 프로그램 실행 시 참조 소스
- c:\Windows\System32\osk.exe 를 실행시키려 함 (화상키보드)
- process.start 를 수행하였으나 찾을 수 없는 파일이라고 출력됨
- 실행프로젝트가 32비트일 경우 sysWOW64
64비트일 경우 system32 폴더를 바라봄
- MES 프로젝트는 32비트로 빌드되며
이를 64비트로 변경할 경우 참조라이브러리로 인해 실행되지 않는 화면들이 있어 32비트로 사용해야 함
- 32/64에 따라 지정폴더를 변경
- 다음과 같은 3개의 함수 생성
ShellExecute : 외부 프로그램 실행을 위한 함수
Wow64DisableWow64FsRedirection / Wow64RevertWow64FsRedirection : 32/64비트 전환을 위한 함수
[DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
[DllImport("kernel32.dll", SetLastError = true)] static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
[DllImport("kernel32.dll", SetLastError = true)] static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
실행로직 : C:\WINDOWS\SYSTEM32\osk.exe
IntPtr llosng = IntPtr.Zero;
Wow64DisableWow64FsRedirection(ref llosng);
ShellExecute(this.Handle , "open" , Environment.SystemDirectory + "\\osk.exe", "","",4);
Wow64RevertWow64FsRedirection(llosng);
참조 URL
https://kdsoft-zeros.tistory.com/105