Приложение-заставка не читает App.Config

Я написал экранную заставку на С#, но всякий раз, когда я запускаю ее в режиме предварительного просмотра или позволяю ей запуститься, она выдает исключение. Когда я дважды щелкаю по нему в Windows \ System32, он работает нормально. С помощью отладчика Visual Studio я обнаружил, что он не читает файл .config приложения, который также находится в Windows\System32.

Я думаю, что когда rundll32.exe запускает заставку, файл app.config пропускается. Есть ли способ заставить его загрузиться?

Спасибо


person Michali    schedule 20.01.2010    source источник
comment
С экранными заставками .NET я всегда использовал только пользовательский сериализованный myScreenSaver.xml (в то же время использовал также для изменения настроек экранной заставки).   -  person sabiland    schedule 20.01.2010


Ответы (5)


Спасибо тем, кто порекомендовал SysInternals Process Monitor. Используя это, я увидел, что он ищет 8-буквенную версию имени файла конфигурации. Это первые шесть букв файла SCR, затем ~1.scr, потому что это имя процесса. Все, что мне нужно сделать, это переименовать файл или, скорее, оставить две его версии, так как я не хочу менять имя файла scr.

person Michali    schedule 20.01.2010
comment
Если причина, по которой вы не хотите менять имя файла, заключается в том, что вы не хотите менять способ отображения имени заставки на панели управления, это может вас заинтересовать: github.com/steveniles/MandelZoom/wiki/Screen-saver-quirks (Раскрытие информации: это часть вики, которую я написал, чтобы объяснить некоторые технические детали моей экранной заставки.) - person Steve Niles; 07.12.2012
comment
Это было причиной моей проблемы. Щелчок правой кнопкой мыши на заставке, которую я написал, и выбор «Установить» означали, что она устанавливается в реестре с коротким путем. Поскольку у меня были пакеты nuget, требующие перенаправления привязки, файл конфигурации больше не соответствовал. Я изменил конфигурацию на FOO~1.SCR.CONFIG, и все заработало нормально. Как раздражает ! - person nrjohnstone; 11.12.2017

Насколько я помню из своего предыдущего опыта, хранители экрана запускаются с «текущим каталогом», установленным на %userprofile%. Вы можете проверить, верно это или нет, временно поместив файл конфигурации в этот каталог. И если это окажется правдой, вам нужно добавить код для чтения вашей конфигурации из каталога, в котором находится ваша заставка, а не из его текущего каталога.

person Igor Korkhov    schedule 20.01.2010
comment
Как я могу заставить заставку читать файл конфигурации из каталога, в котором находится файл .scr? - person Michali; 20.01.2010
comment
@FrancisCastiglione: Извините, что задал вам вопрос вместо того, чтобы ответить на ваш, но как вы теперь читаете свою конфигурацию? - person Igor Korkhov; 20.01.2010

Используйте Process Monitor, чтобы увидеть, какие файлы конфигурации пытается прочитать экранная заставка.

person Richard    schedule 20.01.2010
comment
ProcessMonitor показывает все, что приложение пытается прочитать. ProcessExplorer показывает список приложений в системе. - person Andrey Shchekin; 20.01.2010
comment
Ах да, я их перепутал, извините. Надо было написать: вы имели в виду Process Monitor от SysInternals, вот ссылка: technet.microsoft.com/en-us/sysinternals/bb896645.aspx - person Abel; 20.01.2010

Я предполагаю, что ваше приложение запускается с другим рабочим каталогом. Из этого сообщения (читать вниз) кажется, что вам нужно создать обычный исполняемый файл, переименовать его в *.scr, щелкнуть файл правой кнопкой мыши и выбрать «установить», который перемещает оба файла в каталог system32.

Возможно, функция «установить» изменяет способ вызова вашей заставки или место, где она должна искать рабочий каталог.

person Abel    schedule 20.01.2010

Если ни один из советов пока не работает, вы также можете

  • добавьте свою конфигурацию в файл machine.config или
  • использовать пользовательский файл для конфигурации
person Dirk Vollmar    schedule 20.01.2010