CreateDesktop в C#

#c# #desktop

#c# #Для рабочего стола

Вопрос:

я пытаюсь запустить процесс, но хочу, чтобы он был скрыт — так что, наверное, я хочу запустить его на другом рабочем столе.

 public static void LaunchCommand2(string strCommand)
        {
            // Variables
            PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();
            STARTUPINFO startInfo = new STARTUPINFO();
            Boolean bResult = false;
            IntPtr hToken = IntPtr.Zero;
            UInt32 uiResultWait = WAIT_FAILED;
            IntPtr desktop = CreateDesktop("temp", IntPtr.Zero, IntPtr.Zero, 0, (long)DESKTOP_ACCESS_MASK.GENERIC_ALL, IntPtr.Zero);
            startInfo.lpDesktop = "temp";
            try
            {
                startInfo.cb = Marshal.SizeOf(startInfo);
                startInfo.dwFlags = STARTF_USESHOWWINDOW;
                startInfo.wShowWindow = 0;
                unsafe
                {
                    WTSQueryUserToken(WTSGetActiveConsoleSessionId(),out hToken);
                }

                bResult = Win32.CreateProcessAsUser(
                    hToken,
                    null,
                    strCommand,
                    IntPtr.Zero,
                    IntPtr.Zero,
                    false,
                    0,
                    IntPtr.Zero,
                    null,
                    ref startInfo,
                    out processInfo
                );
                if (!bResult) { throw new Exception("CreateProcessAsUser error #"   Marshal.GetLastWin32Error()); }

                // Wait for process to end
                uiResultWait = WaitForSingleObject(processInfo.hProcess, INFINITE);
                if (uiResultWait == WAIT_FAILED) { throw new Exception("WaitForSingleObject error #"   Marshal.GetLastWin32Error()); }
            }
            finally
            {
                // Close all handles
                CloseHandle(hToken);
                CloseHandle(processInfo.hProcess);
                CloseHandle(processInfo.hThread);
            }
        }
 

но это не работает. я не знаю, правильно ли я настраиваю новый рабочий стол на StartInfo. Заранее благодарю.

Комментарии:

1. Почему бы не использовать службу Windows?

2. Кроме того, если вы установите для «ShowInTaskbar» в своей форме значение false, оно не будет отображаться.

3. если вы хотите скрыть процесс, просто используйте the_StartInfo . WindowStyle = ProcessWindowStyle. Скрыто; the_StartInfo.UseShellExecute = false;

4. @Gusman что вы имеете в виду? как установить для него значение true?

5. Каждая форма имеет свойство с именем «ShowInTaskbar», если вы установите для него значение false и после form_load выполните команду Hide(), окно исчезнет и не будет иметь значка на панели задач, поэтому оно будет скрыто.