Windows CE удаляет .NET CF при сбросе

Я пишу приложение C# для проприетарного устройства Windows CE 4.2 (для которого у меня нет спецификаций или какой-либо другой информации. У меня есть доступ к файловой системе, и это в основном все). Я также не могу получить поддержку от оригинального производителя.

Теперь я могу без проблем установить платформу .NET Compact, и какое-то время все работает. Но время от времени, когда устройство перезагружается, оно удаляет - фреймворк, GAC, все, что с ним связано.

Я знаю, что это не просто полный сброс настроек, возвращающийся к заводским настройкам, потому что:

  1. Он запоминает настройки реестра (если я попытаюсь установить снова, он говорит, что фреймворк уже установлен, и спрашивает, хочу ли я переустановить. Очевидно, что ключи реестра все еще там)
  2. Файлы удаляются, даже если я установил фреймворк на съемную флеш-карту. (Однако другие файлы на карте памяти остаются в покое)

Я знаю, что дальше особо нечего, но, возможно, какой-нибудь гуру Windows CE сможет сказать мне, почему это происходит, и есть ли какой-нибудь разумный способ избежать этого. Я мало что знаю о Windows CE, так что, насколько мне известно, это может быть совершенно стандартное поведение.

Если на то пошло, есть какие-нибудь советы о том, как устранить эту неполадку самостоятельно? На данный момент лучшее решение, которое я вижу, - это просто переустанавливать все при каждой загрузке, но это кажется немного неуклюжим.

Редактировать: После сброса GACLOG.TXT, найденный в корне файловой системы, содержит

CGACUTIL: Initializing 12/08/2008

20:43:57.000 CGACUTIL: Initialized

12/08/2008 20:43:57.000 CGACUTIL:

Removing Microsoft .NET CF 3.5.GAC

12/08/2008 20:43:57.000 CGACUTIL: Done

12/08/2008 20:43:57.000 CGACUTIL:

Exiting 12/08/2008 20:43:57.000

Так что да, это определенно удаление GAC. Но почему и как это остановить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
12 292
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Думаю, вам нужно запустить RegSave, чтобы после установки чего-то сохранить настройки реестра. Мне пришлось сделать это в более старой (до .Net) версии Windows CE.

Но все наоборот. Он сохраняет реестр, но удаляет установленные .dll.

jalf 08.12.2008 22:27

Понятно. В старой версии, с которой я работал, при перезагрузке все удалялось. Была специальная папка, в которую мы помещали CAB-файл для переустановки приложения. Это все, что я помню.

Kosta 08.12.2008 22:34

Верно, но я смутно припоминаю, что в эту папку можно было также положить дедаб-файлы. Найдите тот, где другие файлы сохраняются после перезагрузки. Папки означают не то, что вы думаете. Иерархии на самом деле не иерархии. Все для фальшивого "богатого опыта окон".

dkretz 08.12.2008 22:43

Немного обновил мой вопрос. Понятно, что хранилище устройства не просто сбрасывается. На самом деле он запускает cgacutil для удаления GAC вручную. Тем не менее, спасибо за предложения. (Кстати, что вы имеете в виду под дедаб-файлами?

jalf 08.12.2008 22:54

Имелось в виду "decab'd - снято с кабины".

dkretz 09.12.2008 05:29
Ответ принят как подходящий

Есть несколько вариантов поведения Windows CE и CF, которые вы видите здесь, которые дают вам такое поведение. К сожалению, действительно хорошего решения нет, но я могу по крайней мере дать вам некоторые рекомендации.

  1. Windows CE хранит текущее хранилище объектов, включая файлы в файловой системе, а не в постоянном хранилище в ОЗУ. Сюда входят любые файлы и / или папки, добавленные в папку \ Windows (это ключевой момент в вашем случае). При отключении питания устройства - обычно при программном или аппаратном сбросе - эти данные теряются.
  2. Реестр CE может (и, вероятно, находится на вашем устройстве) храниться в постоянном хранилище. Он может находиться в файловой системе (в виде куста) или в каком-то невидимом месте (OEM-производитель может хранить его двумя разными способами). Это нет потеряно при сбросе. Будут потеряны только те элементы, которые не были сброшены.
  3. В качестве дополнения к № 2 - изменения реестра сбрасываются при вызове API RegFlushKey. При установке CAB автоматически вызывает это (так же и при установке CF). Некоторые OEM-производители также предпочитают использовать периодический таймер для промывки.
  4. Когда CF GAC помещает элементы, которых нет в образе, это файл взолнованный в папке \ Windows. Они положить обратно, когда сборка выгружается (я жаловался команде CF на это много лет назад, но безрезультатно).

Это означает, что если вы установите CF на карту памяти и запустите приложение, это произойдет:

  1. Файлы CF копируются в постоянное хранилище во время распаковки CAB
  2. Ключи в установочный рег написаны
  3. Реестр очищен (сохранен)
  4. Приложение запускается
  5. Файлы CF перемещаются (не копируются) в \ Windows, которая является нестабильной.

Теперь если перезагрузить устройство при загрузке сборок CF - пуф! больше нет CF. Ваше приложение было на карте памяти, но не в GAC, поэтому оно выживает, но больше не может работать.

Решение для взлома: используйте собственное приложение для "начальной загрузки" для запуска вашего приложения. Попросите его проверить файлы CF в \ Windows при запуске, и если их там нет, установите CF CAB из места в постоянном хранилище (отметьте его как доступный только для чтения, чтобы wceload не удалял его).

Другой вариант - распространять сборки CF вместе с вашим приложением, а не с GAC.

Спасибо. Очень полезно. Завтра я попробую это сделать на работе, но похоже, что вы его прибили (и как будто вас это уже укусило раньше;))

jalf 09.12.2008 22:21

Да, первое - это то, что я обычно использую с разной загрузкой в ​​зависимости от устройства. Однако я никогда не понимаю, почему некоторые устройства не слушают / silent или / noui или любую другую комбинацию, которую я предоставляю. Во-первых, мне пришлось (ewwww) отправить ключи для переустановки при холодной загрузке и установить устройство в киоск.

Quibblesome 06.01.2009 18:46

Даже не заставляйте меня начинать с этой части @% $ # wceload. Вот почему я написал наш SDK для установщика CAB - чтобы вы могли распаковать CAB самостоятельно и иметь полный контроль над установкой.

ctacke 07.01.2009 00:27

Я думал, что установил .NET CF постоянно, установив его на \Backup\Windows`, which gets copied to \ Windows` при холодной загрузке автоматически (на моем устройстве) и сделав эти файлы GAC доступными только для чтения, чтобы они не удалялись. Но мне кажется, что я больше не могу это воспроизвести. Слишком плохо!

Yahoo Serious 29.07.2011 20:11

На моем DataLogic Memor CE я теперь могу заставить новую установку .Net пережить холодную загрузку, вручную сохранив «сеанс» (что бы это ни значило). Он находится здесь:
Start | Settings | Control Panel | Files Admin | Save session
(Диалог остается открытым после нажатия кнопки «Сохранить сеанс», но вы можете просто закрыть это диалоговое окно.)

Это (очевидно) по-прежнему требует ручных действий, так что это просто еще один обходной путь. Быстрее подать заявку всего на несколько устройств (во время разработки / тестирования), но дополнительный установочный файл или код взлома ctacke, вероятно, лучше для больших объемов.

Это также означает, что есть способ сделать новую установку .Net постоянной с помощью программного обеспечения. Так что, может быть, кого-то побудят выяснить, как это сделать, и поделиться этим со всем миром?

PS: Я не знаю, насколько универсальным является это ручное сохранение (применимо ли оно к другим устройствам, другим брендам или другим CE-версиям). Я также не знаю, является ли это постоянной загрузкой чистый.

Я знаю, что это очень старый вопрос, но поскольку у меня была та же проблема, что и в вопросе, я провел много исследований, чтобы заставить его работать. И мне удалось сделать это без использования собственного загрузочного приложения.

1) Я использовал MSCEInf для извлечения кабины CF заранее. Я скопировал извлеченные данные (содержащие папку \ Windows) и исходный файл cab на SD-карту и вставил его в свое устройство после полной загрузки.

2) Теперь сначала установите cab, выберите пустую папку (при необходимости создайте ее) на той же SD-карте или другом хранилище NAND.

3) Скопируйте содержимое папки \ Windows, которую вы извлекли из кабины CF ранее, в ту же папку, в которую вы установили CF. Если будет предложено перезаписать какие-либо файлы, всегда выбирайте «Нет».

4) Убедитесь, что все приложения, которые используют / нуждаются в CF, находятся в той же папке. Вы также можете поместить туда любые вложенные папки, принадлежащие приложению, в неизменном виде.

Во всяком случае, у меня это сработало. Приложения продолжают работать даже после перезагрузки.

Надеюсь это поможет!

Я часами проводил мозговой штурм и, наконец, начал писать руководство пользователя по настройке аппаратных устройств на базе WinCE 7 и построению проекта. Будет доступно в ближайшее время. Спасибо за участие в моем исследовании

Другие вопросы по теме