본문 바로가기

[C#] 한글파일 접근 허용 여부

I'm 영서 2022. 7. 7.
반응형

 

C#에서 한글파일을 통한 입출력을 할 때

접근 허용을 묻는 팝업이 나오는 이슈가 있다.

이는 문서를 불러올 때 로컬 영역에 파일 입출력을 하는 경우에 보안 권고를 하는 것으로 

국정원 권고 사항이다.. 

 

나같은 경우는 아래와 같이 선택한 값들에 대해 한글파일을 전부 생성해줘야 했기 때문에 반복문을 돌리면 해당 팝업이 반복되는 횟수만큼 나타났다.

이때 작업하는것을 BackGroundWorker를 통해 백그라운드 쓰레드에서 작업하고, 폼에서는 ProgressPopup.showDialog() 을 통해  입출력을 막앗기 때문에 해당 오류가 발생할때 포커스가 튀는 경우 해결을 못하는 이슈가 있었다. 

 

 

 

 

이를 해결하기 위한 포스팅으로

1. 레지스트리dll다운로드

2. 프로젝트에 dll추가

3. 컴퓨터에 레지스트리에 dll파일 추가

4. HwpCtrl에 RegistryModule 추가

*주의사항

의 3단계를 거친다.

 

 

1. 레지스트리dll다운로드

이에 대응하여 한컴에서는 레지스트리 모듈을 준비해놨다.

http:// https://www.hancom.com/board/devdataView.do?board_seq=47&artcl_seq=4084&pageInfo.page=&search_text=

 

모듈을 다운받고 압축을 풀면

FilePathCheckerModuleExample.dll 파일이 있다!

 

 

2. 프로젝트에 dll추가

이제 해당 dll을 프로젝트에 추가하자. 

(참조를 통한 추가는 안되기 때문에 프로젝트에 다이렉트로 추가했고  출력 디렉터리에 복사에서 항상복사를 선택했다.

 

이렇게하면 debug경로에 항상 해당 dll이 생성되므로 타 컴퓨터에서 실행 시켯을때 프로젝트에 추가해둔 dll을 가져올 수 있다

 

 

3. 컴퓨터 레지스트리에 dll파일 추가

const string HNCCtrl = @"HKEY_CURRENT_USER\Software\HNC\HwpCtrl\Modules";
//const string HNCAutomation = @"HKEY_CURRENT_USER\Software\HNC\HwpAutomation\Modules";
string myProjectPath = Path.GetFullPath(".\\");
try
{
    if (Microsoft.Win32.Registry.GetValue(HNCCtrl, "FilePathChecker", "Not Exist").Equals("Not Exist"))
    {
        Microsoft.Win32.Registry.SetValue(HNCCtrl, "FilePathChecker", Environment.CurrentDirectory + "\\" + "FilePathCheckerModuleExample.dll");
        //Microsoft.Win32.Registry.SetValue(HNCAutomation, "FilePathChecker", Environment.CurrentDirectory + "\\" + "FilePathCheckerModuleExample.dll");

    }
}
catch
{
    Microsoft.Win32.Registry.SetValue(HNCCtrl, "FilePathChecker", Environment.CurrentDirectory + "\\" + "FilePathCheckerModuleExample.dll");
}

이렇게 하면 자동으로 해당 경로에 registry를 등록한다.

 

4. HwpCtrl에 RegistryModule 추가

레지스트리를 등록하면 이제 적용할 차례다.

hwpCtrl.CreateControl();
hwpCtrl.RegisterModule("FilePathCheckDLL", "FilePathChecker");

 

 

*주의사항

나같은경우에는 이렇게 한 뒤 InvalidActiveXStateException 가 발생했는데. 

이는 컨트롤을 먼저 Create해주지 않앗기 때문으로 반드시 CreateControl을 먼저 해야한다!

 

 

반응형

댓글