Я написал заставку в C # и Windows Forms. Для тестирования я был ленив и просто использовал файл конфигурации для всех своих настроек (диалоговое окно настроек пока нет), но программа, похоже, не может найти или прочитать файл конфигурации, когда Windows запускает заставку.
Это работает, когда я использую кнопку предварительного просмотра или запускаю ее вручную любым способом, и только когда он достигает тайм-аута заставки, он не может найти файл конфигурации.
Имея это log AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
Возвращает короткое имя: C:\Windows\System32\MYSCRE~1.config
Где это должно быть C:\Windows\System32\MyScreenSaverName.scr.Config
Итак, я предполагаю, что проблема в том, что он не может найти файл конфигурации с коротким путем к имени.
Не уверен, связано ли это с системной учетной записью, под которой Windows 7 запускает экранные заставки, или с чем-то еще о том, как он запускается. Любая информация будет полезна, спасибо.
Редактировать: Пытаться найти какие-либо различия:
- Единственное отличие, которое я могу найти, состоит в том, что
Environment.CommandLine
возвращает C:\Windows\system32\MYSCRE~1.SCR /s
, когда Windows запускает заставку, но имеет нормальный путь при запуске
- Все под
Process.GetCurrentProcess().StartInfo
одинаково
WindowsIdentity.GetCurrent().Name
это имя моей учетной записи
Глядя на другие вопросы, кажется, что именно User32 запускает скринсейверы, поэтому я полагаю, что это должно быть что-то о том, как это запускает процесс scr.
Обходной путь: Переименование моего файла .scr в 8 или менее символов позволяет ему работать правильно. Так что пока это работает, все равно хотелось бы знать, почему существует эта проблема.