Как запустить windows form под текущим пользователем из сервиса.
По умолчанию запускается под системой, как невидимое.
Здесь есть решения
http://www.rsdn.ru/forum/dotnet/3718029.flatАвтор: licedey
Дата: 26.02.10
,
http://henry-chong.com/2012/03/getting-the-current-active-user-in-c-sharp/#comment-2775
но к сожалению совершенно непонятно как его использовать для C# приложений
Здравствуйте, Track77, Вы писали:
T>Как запустить windows form под текущим пользователем из сервиса.
T>По умолчанию запускается под системой, как невидимое.
T>Здесь есть решения
T>http://www.rsdn.ru/forum/dotnet/3718029.flatАвтор: licedey
Дата: 26.02.10
,
T>http://henry-chong.com/2012/03/getting-the-current-active-user-in-c-sharp/#comment-2775
T>но к сожалению совершенно непонятно как его использовать для C# приложений
Обсуждалось неоднократно. Например,
здесьАвтор: Hayabusa
Дата: 04.09.12
.
Правда, там все на "голом" Win32 API, а в .NET, быть может, давно уже удобный класс
какой-нибудь существует...
Сделал на основе вот этого решения
http://henry-chong.com/2012/03/getting-the-current-active-user-in-c-sharp
Собственно проблема была в том, чтобы определить, когда запускать создание формы
Сейчас определяю с помощью Environment.UserInteractive
Если запущено не из-под текущего пользователя, то запускаю с помощью ProcessHelper
и при следующем "проходе" уже идет нормальный полноценный запуск.
private static void Main(string[] args)
{
Process[] ps = Process.GetProcessesByName("explorer");
int processId = -1;
if (ps.Length > 0)
{
processId = ps[0].Id;
}
if (!Environment.UserInteractive)
{
string command = "\"" + string.Join("\" \"", args) + "\"";
Console.WriteLine("arguments: " + command);
ProcessHelper proc = new ProcessHelper("explorer", System.IO.Path.Combine(Application.StartupPath, "CGFARM.MANAGER.exe"), command);
proc.Run(processId);
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainForm = new ManagerForm(args);
SingleInstanceApplication.Run(MainForm, StartupNextInstanceHandler);
}
}