2011-12-01 2 views
1

우리는 Shell32.Folder 및 Shell32.FolderItem을 통해 프로그래밍 방식으로 Windows 셸을 사용하여 파일을 복사 (실제로 압축을 풀 ... 묻지 않음)하는 프로그래밍 방식의 C# 코드가 있습니다 (Interop.Shell32 어셈블리에서 생각한 것입니다. 셸 객체를 감싸는 얇은 래퍼). 코드는 두 가지 다른 컨텍스트에서 서비스로 사용되지만 한 컨텍스트에서는 LocalSystem으로 실행되고 다른 한 컨텍스트에서는 제한된 사용자로 실행됩니다. 현재로서는 두 가지 상황 모두에서 작동해야하지만, 결국 제한된 사용자로만 실행하고 싶습니다.사용자로 로그인 한 Windows 서비스에서 셸 기능을 사용하는 방법이 있습니까?

"서비스가 데스크톱과 상호 작용하도록 허용"확인란이 선택되어 있지만 제한된 또는 관리자가 아닌 특정 사용자 계정에서 전혀 작동하지 않는 경우에도 Shell32 기능은 LocalSystem처럼 잘 작동합니다. 우리는 오류 정보를 얻을 수 없었습니다 - 서비스가 실행중인 사용자로 로그인하면 대화 상자가 팝업되지 않습니다.

나는 서비스에서 이와 같이 셸을 사용하는 것이 좋지 않을 수도 있다는 것을 알고 있지만, 잠시 그 ​​옆에 둡니다. 올바른 결과를 얻었습니까? 나는 이것이 사용자 계정에 대한 제한이지만 로컬 시스템 계정 (다시 말하면 데스크톱 상호 작용 스레드가 선택 해제 됨)이 아니라는 확실한 문서를 찾지 못했습니다. 나는 두 상황 모두에서 또는 둘 모두에서 실패 할 것이라고 예상했을 것이다.

좋은 정보에 대한 정보 또는 유용한 정보가 도움이 될 것입니다. 내가 찾을 수있는 가장 좋은 정보는 here이며 사용자 계정으로 실행되는 서비스는 "비대화 형"윈도우 스테이션을 갖지만 SERVICE_INTERACTIVE_PROCESS 플래그가없는 로컬 시스템에 대해서는 동일한 내용을 말합니다. 데스크톱 UI와는 상호 작용하지 않습니다. "

답변

0

쉘을 사용하는 유일한 이유는 압축을 풀어야한다는 것이므로 DotNetZip과 같은 라이브러리를 사용하는 것이 좋습니다.이 방법은 훨씬 더 좋을 것입니다. 뿐만 아니라 문제를 완전히 피할 수 있습니다. 가 그것은 어떤 계정에서 작동합니다

(파일 액세스를 사용할 수 제공), 그리고 쉘을 필요로하지 않습니다

. 내가 케이

+0

을 지금, 내 목표는 다른 것으로 전환하는 것이지만, 우리는 매우 큰 zip 파일 및 라이센스 제한과 관련된 특정 요구 사항이 있습니다. 먼저이 문제를 해결해야합니다. 차라리 대체 라이브러리가 아닌 셸 관련 질문에 초점을 맞추어 토론을 진행할 것입니다. – rationull

+0

Mirosoft의 PKZip 라이센스는 타사 프로그램에 적용되지 않습니다. –

+0

잘 모르는 곳. 아무도 쉘 객체를 사용하여 zip 폴더에서 파일을 복사하는 프로그램을 작성할 수 있습니까? 나는 여기에 문제가 있다고 생각하지 않는다. – rationull