Я пишу приложение C# для проприетарного устройства Windows CE 4.2 (для которого у меня нет спецификаций или какой-либо другой информации. У меня есть доступ к файловой системе, и это в основном все). Я также не могу получить поддержку от оригинального производителя.
Теперь я могу без проблем установить платформу .NET Compact, и какое-то время все работает. Но время от времени, когда устройство перезагружается, оно удаляет - фреймворк, GAC, все, что с ним связано.
Я знаю, что это не просто полный сброс настроек, возвращающийся к заводским настройкам, потому что:
Я знаю, что дальше особо нечего, но, возможно, какой-нибудь гуру 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. Но почему и как это остановить?





Думаю, вам нужно запустить RegSave, чтобы после установки чего-то сохранить настройки реестра. Мне пришлось сделать это в более старой (до .Net) версии Windows CE.
Понятно. В старой версии, с которой я работал, при перезагрузке все удалялось. Была специальная папка, в которую мы помещали CAB-файл для переустановки приложения. Это все, что я помню.
Верно, но я смутно припоминаю, что в эту папку можно было также положить дедаб-файлы. Найдите тот, где другие файлы сохраняются после перезагрузки. Папки означают не то, что вы думаете. Иерархии на самом деле не иерархии. Все для фальшивого "богатого опыта окон".
Немного обновил мой вопрос. Понятно, что хранилище устройства не просто сбрасывается. На самом деле он запускает cgacutil для удаления GAC вручную. Тем не менее, спасибо за предложения. (Кстати, что вы имеете в виду под дедаб-файлами?
Имелось в виду "decab'd - снято с кабины".
Есть несколько вариантов поведения Windows CE и CF, которые вы видите здесь, которые дают вам такое поведение. К сожалению, действительно хорошего решения нет, но я могу по крайней мере дать вам некоторые рекомендации.
Это означает, что если вы установите CF на карту памяти и запустите приложение, это произойдет:
Теперь если перезагрузить устройство при загрузке сборок CF - пуф! больше нет CF. Ваше приложение было на карте памяти, но не в GAC, поэтому оно выживает, но больше не может работать.
Решение для взлома: используйте собственное приложение для "начальной загрузки" для запуска вашего приложения. Попросите его проверить файлы CF в \ Windows при запуске, и если их там нет, установите CF CAB из места в постоянном хранилище (отметьте его как доступный только для чтения, чтобы wceload не удалял его).
Другой вариант - распространять сборки CF вместе с вашим приложением, а не с GAC.
Спасибо. Очень полезно. Завтра я попробую это сделать на работе, но похоже, что вы его прибили (и как будто вас это уже укусило раньше;))
Да, первое - это то, что я обычно использую с разной загрузкой в зависимости от устройства. Однако я никогда не понимаю, почему некоторые устройства не слушают / silent или / noui или любую другую комбинацию, которую я предоставляю. Во-первых, мне пришлось (ewwww) отправить ключи для переустановки при холодной загрузке и установить устройство в киоск.
Даже не заставляйте меня начинать с этой части @% $ # wceload. Вот почему я написал наш SDK для установщика CAB - чтобы вы могли распаковать CAB самостоятельно и иметь полный контроль над установкой.
Я думал, что установил .NET CF постоянно, установив его на \Backup\Windows`, which gets copied to \ Windows` при холодной загрузке автоматически (на моем устройстве) и сделав эти файлы GAC доступными только для чтения, чтобы они не удалялись. Но мне кажется, что я больше не могу это воспроизвести. Слишком плохо!
На моем 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 и построению проекта. Будет доступно в ближайшее время. Спасибо за участие в моем исследовании
Но все наоборот. Он сохраняет реестр, но удаляет установленные .dll.