Сделал на основе вот этого решения
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);
}
}