개발/C#

system32 , sysWOW64 의 프로그램 실행 시 참조 소스

whatever , whoever 2021. 1. 18. 19:46
반응형

- 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);  

 

OSK.zip
0.19MB

 

참조 URL

https://m.blog.naver.com/PostView.nhn?blogId=iooic2&logNo=221096736196&proxyReferer=https:%2F%2Fwww.google.com%2F

https://kdsoft-zeros.tistory.com/105

https://www.tr1umph.co.kr/entry/64bit-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-system32-%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0

 

 

 

반응형