Я написал приложение-оболочку в .Net, которое запускает другое приложение WinForms с указанным именем пользователя и паролем. Чтобы узнать, почему мне нужно это сделать, вы можете посмотреть на следующий вопрос, который я разместил ранее на этой неделе:
Как защитить сетевую папку, содержащую базу данных Access, при этом позволяя приложению WinForms подключаться к базе данных
Вот код для приложения-оболочки:
string sysFolder = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = (sysFolder + @"\AppMain.exe").Replace(@"file:\", @"\\");
pInfo.UserName = GetUserName();
pInfo.Password = ToSecure(GetPassword());
pInfo.UseShellExecute = false;
Process p = Process.Start(pInfo);
p.WaitForExit();
Методы GetUserName () и GetPassword () просто извлекают имя пользователя и пароль из зашифрованного текстового файла. Метод ToSecure () просто преобразует String в System.Security.SecureString .
Ok. Теперь вот странная часть! :) Это приложение-обертка действительно работает правильно MOST времени; но по какой-то странной причине кажется, что проблема возникает сразу после перезагрузки системы. После перезапуска примерно на 5 минут запускаемое приложение (AppMain.exe) выдает исключение UnauthorizedAccessException, когда приложение пытается выполнить запись в реестр Windows. Я понятия не имею, почему это происходит не так в первые 5 минут, а потом вдруг начинает работать правильно.
Обратите внимание, что мне нужно закрыть приложение и перезапустить его через пять минут после загрузки, чтобы оно работало правильно. Если я просто нажимаю «продолжить» в ожидании, оно продолжает выдавать исключение при попытке записи в реестр.
Вот код, который выдает исключение при запуске приложения после перезагрузки.
Microsoft.VisualBasic.Interaction.SaveSetting("app", "settings", "time", DateTime.Now.ToString());
Я подтвердил такое поведение на XP и Windows 7. У любого есть идеи, почему это происходит при запуске и почему исключение внезапно исчезает, если я запускаю приложение через 5 минут после загрузки.