2009-11-13 4 views
2

실행중인 .NET 백그라운드 프로세스에서 활성 사용자 세션의 프로그램을 시작하려면 어떻게해야합니까? 기본적으로 .NET 응용 프로그램을 서비스로 실행하고 특정 응용 프로그램이 특정 이벤트가 발생할 때 사용자 바탕 화면에서 특정 창 응용 프로그램을 시작하도록합니다.서비스의 활성 사용자 세션에서 프로그램을 시작 하시겠습니까?

어떻게하면됩니까?

이 질문에이 일에 관련이 : Start a program in active user session with PowerShell remoting

업데이트
은 현재 응용 프로그램 세션에서 응용 프로그램을 실행하기 때문에 여기에 작동하지 않습니다 혼자 Process.Start 사용. 특정 사용자의 활성 데스크톱 세션에서 응용 프로그램을 시작하지 않습니다.

+0

100 % 확신 할 수는 없지만 거의 답변을 게시하지 않았습니다. – ChrisF

+0

걱정 마세요 크리스, 시간 내 주셔서 감사합니다. –

+0

1) 시스템에 여러 사람이 로그인 한 경우 어떻게됩니까? 터미널 서비스 또는 빠른 사용자 전환이 발생할 수 있습니다. 2) 사용자의 보안 컨텍스트 또는 서비스의 보안 컨텍스트에서 창 응용 프로그램을 시작 하시겠습니까? – Ragesh

답변

0

CreateProcessWithLogonW 함수를 사용하면 응용 프로그램을 실행하려는 사용자의 자격 증명을 전달할 수 있습니다.

또한이 경로를 따라 가면 STARTUPINFO 구조체를 전달하여 올바른 바탕 화면에서 시작하고 null로 두지 말고 전달해야합니다.

+1

"Run As"가 내가 여기서하려고하는 것과 동일하지 않을 수 있습니다. 특정 사용자 자격 증명을 사용하여 현재 세션에서 응용 프로그램을 실행하기 만하면됩니다. –

+0

죄송합니다. 먼저 관련 질문을 확인하지 않았습니다. 특정 세션에서 실행하기 위해 WTSQueryUserToken을 사용하여 단일 시스템에서 구현하는 것이 가능할 것이라고 생각하지만 원격 처리가 관련되었다는 사실을 알지 못했습니다. –

2

사용자가 백그라운드에서 실행할 수있는 일종의 경량 리스너 응용 프로그램을 빌드하는 것이 가능합니까? 아마 당신의 서비스는 청취자와 통신하여 청취자에게 사용자의 컨텍스트에서 실행 중이기 때문에 창 응용 프로그램을 인스턴스화하게 할 것입니다.

+0

확실히 가능한 접근법. 그래도 나에게 매우 흥미있는. 나는 Windows Remoting (.NET)을 사용하여 여러 대의 컴퓨터에서 내 세션에서 응용 프로그램을 신속하게 재활용하는 방법을 찾고 있습니다. 최선을 다하는 것보다 쉽게 ​​할 수 없다면 앱을 서비스로 실행하고 서비스를 다시 시작할 수 있으며 특정 세션 데스크톱에서 실행되는 것에 대해 걱정하지 않아도됩니다. –

0

Windows 서비스의 로그온 컨텍스트를 shown here으로 확인하십시오. 이를 통해 Windows 서비스와 데스크톱 세션의 상호 작용을 허용합니다.

+0

이것은/CONSOLE 세션에서만 작동하며 특정 활성 사용자 세션을 대상으로 허용하지 않는다고 생각합니다. –

+0

Windows 서비스가 이전에 사용자의 데스크톱과 상호 작용하는 것을 보아서 내가 잘못 본 것 같습니다. – BlueSam

관련 문제