서비스 응용 프로그램과 Windows 양식 응용 프로그램을 만들었습니다. 이제 서비스에서 Windows 응용 프로그램을 시작하고 싶습니다. 나는 서비스 격리 때문에때문에 win7에서 'advapi32.dll'메소드의 'CreateProcessAsUser'를 사용하지만 'Task manager'에도 나타나지만 UI는 표시되지 않을 것입니다. 사용자에게 불쾌감을 줄 수 있습니다. 그 이유는 무엇입니까? 아무도 나를 도울 수 없나요?Windows 서비스의 UI가있는 프로세스를 어떻게 시작할 수 있습니까?
좋아 날 나는 서비스의() 메소드의 ONSTART LounchNewApplication를 호출하고
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Ansi, EntryPoint = "CreateProcessAsUser")]
public static extern bool CreateProcessAsUser(IntPtr hToken,string lpApplicationName,string lpCommandLine,ref SECURITY_ATTRIBUTES lpProcessAttributes, ref SECURITY_ATTRIBUTES lpThreadAttributes,bool bInheritHandles,int dwCreationFlags,string lpEnvironment,string lpCurrentDirectory,ref STARTUPINFO lpStartupInfo,ref PROCESS_INFORMATION lpProcessInformation);
void LounchNewApplication()
{
try
{
string strAppName = @"D:\Working\UAC Demo\Tester\bin\Debug\Tester.exe";
string strAppPath = @"D:\Working\UAC Demo\Tester\bin\Debug\";
PROCESS_INFORMATION lpProcessInformation = new PROCESS_INFORMATION();
SECURITY_ATTRIBUTES lpProcessAttributes = new SECURITY_ATTRIBUTES();
lpProcessAttributes.nLength = (uint)Marshal.SizeOf(lpProcessAttributes);
STARTUPINFO lpStartupInfo = new STARTUPINFO();
lpStartupInfo.cb = Marshal.SizeOf(lpStartupInfo);
lpStartupInfo.lpDesktop = "WinSta0\\Default";
IntPtr htoken = IntPtr.Zero;
LogonUser("myName", "DomineName", "password", 2, 0, out htoken);
if (!CreateProcessAsUser(htoken, strAppName, null, ref lpProcessAttributes,
ref lpProcessAttributes, true, 0, null, strAppPath, ref lpStartupInfo,
ref lpProcessInformation))
{
eventLogger.WriteEntry("Error in starting application", EventLogEntryType.Error);
}
else
eventLogger.WriteEntry("Application launched successfulll" EventLogEntryType.Information);
//CloseHandle(lpProcessInformation.hThread);
//CloseHandle(lpProcessInformation.hProcess);
}
catch (Exception ex)
{
eventLogger.WriteEntry(ex.Message,
EventLogEntryType.Error);
}
}
을 쓴 코드를 제공 할 수 있습니다.
친애하는 Michael, 답장을 보내 주셔서 감사합니다. 이제는 win 서비스에서 응용 프로그램을 시작하고 사용자 세션에서 UI를 볼 수있게되었습니다. 대단히 감사합니다 ... – Arjuna
@Arjuna, 이것이 도움이된다면 Michael이 적절한 신용을 얻도록이 대답을 받아 들여야합니다. –