2

В решении у меня есть несколько файлов .exe, которые находятся в одном каталоге. Одним из них является главное меню, которое просматривает все остальные пути исполняемых файлов (в пределах одного и того же каталога) и назначает кнопкам в форме. Когда кнопка нажата, она запускается через exe через Process.Start().Windows Mobile 6.5 - TypeLoadException в Process.Start()

Каждый exe упакован в отдельную установку CAB. После первоначальной установки я запускаю главное меню, а затем выбираю любую из кнопок и запущенных приложений. Я бросил его, а затем снова запустить то же самое или любое другое приложение, но на этот раз он падает с:

TypeLoadException 
    at System.Windows.Forms.Control.OnGotFocus(EventArgs e) 
    at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam) 
    at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam) 
    at Microsoft.AGL.Forms.WL.SetFocus(IntPtr hwnFocus) 
    at System.Windows.Forms.Control.Focus() 
    at myApp.Login..ctor() 
    at myApp.Form_UnderApp1.InitializeComponent() 
    at myApp.Form_UnderApp1..ctor() 
    at myApp.Program.Main() 

myApp.Login является UserControl, который имеет TextBox.Focus() в своем конструкторе. Я попытался переместить его в обработчик событий «Validated», но результат тот же, с одной разницей, что на этот раз он падает на Form.Load() при попытке установить свою собственную видимость.

Цикл может быть повторен после сброса устройства. Самое главное, если я запускаю любой из дочерних исполняемых файлов напрямую, запуская и работая нормально все время.

Тот же набор кодов работает отлично на WinMo 6.1. Я также использую класс Application2 OpenNETCF - попытался заменить его стандартным классом Application с тем же результатом. Пытался установить Process.StartInfo.WorkingDirectory и UseShellExecute, но опять же никакой радости. При взгляде на объект Process() в «Мастер-меню» приложение работает так, как ожидалось (создает процесс, возвращает «true» на .Start() и т. Д.).

В GAC не установлены сборки, все файлы находятся в одной директории.

Любые подсказки?

[Редактировать]

После того как я получаю сообщение об ошибке и устройство остается нетронутым в течение примерно 10 минут, все это возвращается, чтобы начать: я могу снова запустить суб-приложение один раз и т.д. Давать, что я пытался вытирая ссылку на текущий процесс из моего главного меню, убивая процесс, вызывая GC.Collect() без результата.

[Редактировать]

журнал погрузчик выглядит нормально до этого момента (это когда приложение начинает сбиваться):

Redirecting [Microsoft.WindowsCE.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969DB8053D3322AC] to [Microsoft.WindowsCE.Forms, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969DB8053D3322AC] 
Loading module [\windows\GAC_Microsoft.WindowsCE.Forms_v3_5_0_0_cneutral_1.dll] 
Loaded [Microsoft.WindowsCE.Forms, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969DB8053D3322AC] from [\windows\GAC_Microsoft.WindowsCE.Forms_v3_5_0_0_cneutral_1.dll] 
Loading module [\Program Files\MyApp\System.SR.dll] 
Attempt to load [\Program Files\MyApp\System.SR.dll] has failed (err 0x80001000). 
Loading module [\Program Files\MyApp\System.SR.exe] 
Attempt to load [\Program Files\MyApp\System.SR.exe] has failed (err 0x80001000). 
Loading module [\windows\System.SR.dll] 
Attempt to load [\windows\System.SR.dll] has failed (err 0x80001000). 
Loading module [\windows\System.SR.exe] 
Attempt to load [\windows\System.SR.exe] has failed (err 0x80001000). 
Failed to load [System.SR, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969DB8053D3322AC] 

После копирования System.SR.dll к приложению INSTALLDIR:

Loading module [\windows\en\System.SR.resources.dll] 
Attempt to load [\windows\en\System.SR.resources.dll] has failed (err 0x80001001) 

установлен System_SR_ENU.CAB и NETCFv2.wm.armv4i.cab, но теперь журнал говорит, что одна из конкретных DLL устройств (ITCScan.DLL) не может быть l oaded, который, как я считаю, является сборкой .NET 3.5. Насколько я знаю, System.SR используется только в .NET2, разве это не то, что какое-то другое исключение пытается всплыть и проявляется вот так?

+0

Вы пытались включить ведение журнала и посмотреть журнал загрузчика, чтобы узнать, что может произойти? (http://msdn.microsoft.com/en-us/library/ms229650%28v=VS.90%29.aspx) – ctacke

+0

@ctacke Журнал загрузчика оставил меня более запутанным (сообщение обновлено), я буду продолжать смотреть – StaWho

+0

FYI: ITCScan не является сборкой .NET 3.5. Это родная библиотека от Intermec. – pdriegen

ответ

0

Я предполагаю, что первый исполняемый файл, который вы выполняете (назовите его Exe A) все еще работает.

Когда кто-то нажимает кнопку, соответствующую Exe A в вашем меню, посмотрите все запущенные процессы, чтобы узнать, запущен ли он.Если это так, просто потяните Exe A спереди.

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

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

+0

Я его гарантирую. Процесс исчезнет из списка после закрытия Exe A. – StaWho

1

У меня была такая же проблема, и я не мог ее решить. Мне пришлось искать другой способ вызвать приложения.

То, что я поставлен параметры в конструктор формы B, а затем вызвать его из . Эти параметры те же, что и аргументы .exe приложения B.

телефонный код:

MyAppNameSpace.MyForm _B = new MyAppNameSpace.MyForm(UserID,Date,this); 
F.Show(); 

Constructor:

public MyForm(string _U, DateTime _d, Form _PrevForm) 
{ 
    Form A = _PrevForm; 
    string U = _U; 
    DateTime d = _d; 
    InitializeComponent(); 
} 

App B имеет дополнительный параметр в конструкторе, который является формой A. Я использую эту форму, чтобы управлять Application.Exit() , Вызов этой функции приведет к закрытию всей системы (APP A и B). Вместо этого вы должны использовать A.show();

public void BackToAppA() 
{ 
    A.show(); 
}