использует CreateProcessasuser для запуска PopupClient внутри сеанса активной консоли.
Вызов успешно (return Code non rue, getlasterror == 0), Process.getProcessbyId находит новую пид, но ничто никогда не появляется на экране пользователя, и HeleppersbyId сразу же. /> минимальное воспроизводство < /strong> < /p>
Создайте оба автономных, однолетных, win-x64 < /p>
< /li>
Скопировать оба exes в одну и ту же папку на целевой машине < /p>
< /li> Приглашение: < /p>
) запустится внутри сеанса Active Console (сеанс 1) и немедленно написать файл и/или показывать Bessagebox на рабочем столе пользователя.
Пока я имею:
подтвержденный запуск действительно успешно (non-rearocessasuser , getLor>, 0 getLOR>, 0 getLor>, 0 getLOR>, 0 getLOR>, 0 getLOR>, 0 getLOR>, 0 getLOR>, 0 getLOR. видно в диспетчере задач для второго или двух
Lerped PopupClient до одного файла. Popupclient.exe интерактивно в сеансе 1 работает отлично (файл написан и появляется Messagebox).
У меня есть две небольшие программы .net 8: < /p> [list] [*][code]Launcher.exe[/code] -приложение консоли, работающее в сессии 0 в разделе «Система» (запускается с Psexec -s). [*][code]PopupClient.exe[/code] - приложение Winforms, которое должно отображать BessolveBox на интерактивном рабочем столе. [/list] [code]Launcher[/code] использует CreateProcessasuser для запуска PopupClient внутри сеанса активной консоли. Вызов успешно (return Code non rue, getlasterror == 0), Process.getProcessbyId находит новую пид, но ничто никогда не появляется на экране пользователя, и HeleppersbyId сразу же. /> [b] минимальное воспроизводство < /strong> < /p> [list] [*] Создайте оба автономных, однолетных, win-x64 < /p> < /li> Скопировать оба exes в одну и ту же папку на целевой машине < /p> < /li> Приглашение: < /p> [code]psexec -s "C:\Temp\PopupTest\Launcher.exe" < /code> Консоль вывод: < /p> === Launcher (Session 0) === Current session : 0 Active console : 1
[*] no [/b] messagebox не отображается, и файлы журналов не создаются popupclient
[/list] [b] Вопросы
[*], хотя один и тот же EXE работает нормально, когда он дважды щелкнул интерактивно? Popupclient.exe . [code]Launcher[/code]: [code]using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices;
namespace Launcher { internal class Program { [DllImport("wtsapi32.dll", SetLastError = true)] private static extern bool WTSQueryUserToken(uint sessionId, out IntPtr token);
[StructLayout(LayoutKind.Sequential)] private struct STARTUPINFO { public int cb; public string lpReserved; public string lpDesktop; public string lpTitle; public uint dwX, dwY, dwXSize, dwYSize; public uint dwXCountChars, dwYCountChars; public uint dwFillAttribute; public uint dwFlags; public short wShowWindow; public short cbReserved2; public IntPtr lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; }
[StructLayout(LayoutKind.Sequential)] private struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public uint dwProcessId; public uint dwThreadId; }
File.AppendAllText(log, "MessageBox closed gracefully.\r\n"); } catch (Exception ex) { File.WriteAllText(Path.Combine(Path.GetTempPath(), "popup_crash.txt"), ex.ToString()); } } } } < /code> What I have tried[/b] [list] Replaced PopupClient[/code] с 5-строчной версией, которая только записывает файл.[code]dotnet publish -r win-x64 -c Release --self-contained true -p:PublishSingleFile=true[/code]). [/list] Я ожидал, что после запуска.[code]PopupClient.exe[/code]) запустится внутри сеанса Active Console (сеанс 1) и немедленно написать файл и/или показывать Bessagebox на рабочем столе пользователя. Пока я имею: [list] [*] подтвержденный запуск действительно успешно (non-rearocessasuser , getLor>, 0 getLOR>, 0 getLor>, 0 getLOR>, 0 getLOR>, 0 getLOR>, 0 getLOR>, 0 getLOR>, 0 getLOR. видно в диспетчере задач для второго или двух [*] Lerped PopupClient до одного файла. Popupclient.exe интерактивно в сеансе 1 работает отлично (файл написан и появляется Messagebox). [/list]