Приложение .net не запускается. При компиляции на компьютере dest (те же источники) это работает. Зачем? - PullRequest
1 голос
/ 26 мая 2010

У меня есть служба, которую необходимо развернуть на клиентском компьютере.

Машина назначения - 64-битная. Моя машинка также 64-битная. Приложение действительно простое, прослушивает порт и выполняет некоторые операции с БД. Он нацелен на .net 3.5

Когда я внедряю Anycpu, версию X64 или X86, эта вещь не будет установлена ​​на клиентском компьютере.

Я проверил зависимость, и в ней перечислены: devmgr.dll ieshims.dll wer.dll

во всяком случае ... Я устанавливаю Visual Studio 2008 на клиентском компьютере ... проверить все источники. Я ничего не меняю и не компилирую. Скопируйте exe-файл в его местоположения dest ... и что вы знаете ... это работает.

Dependencywalker по-прежнему перечисляет те же проблемы с зависимостями.

Как может случиться так, что процесс его компиляции на этой машине даст мне другой exe?

Edit: Когда я говорю, это не устанавливает. Я имею в виду, что installUtil выдает ошибки:

Исключительная ситуация на этапе установки. System.InvalidOperationException: невозможно получить типы установщика в C: \ services Сборка \comingnotifications \ IncomingNotifications.exe. в System.Configuration.Install.AssemblyInstaller.InitializeFromAssembly () в System.Configuration.Install.AssemblyInstaller.Install (IDictionary saveSt съел) в System.Configuration.Install.Installer.Install (IDictionary stateSaver) в System.Configuration.Install.TransactedInstaller.Install (IDictionary сохранен Государственный) Внутреннее исключение System.Reflection.ReflectionTypeLoadException было выброшено h следующее сообщение об ошибке: Невозможно загрузить один или несколько запрошенных типов , Получите свойство LoaderExceptions для получения дополнительной информации. в System.Reflection.Module._GetTypesInternal (StackCrawlMark & ​​stackMark) в System.Reflection.Module.GetTypes () в System.Configuration.Install.AssemblyInstaller.GetInstallerTypes (Assembly Асем) в System.Configuration.Install.AssemblyInstaller.InitializeFromAssembly ()

также ... перед компиляцией в visual studio я проверил, что сервис все равно не будет установлен. После компиляции все заработало.

Edit2: Повторная компиляция на devmachine и пересылка двоичного файла приводит к тем же ошибкам. Компиляция локально дает мне exe, который работает

Ответы [ 3 ]

1 голос
/ 26 мая 2010

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

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

Я бы сначала проверил, что на вашей целевой машине установлена ​​правильная версия .net, так как установка VS включит его, если это не так.

Я бы использовал такой инструмент, как procmon, чтобы увидеть, что происходит при запуске службы, чтобы убедиться, что отсутствует какая-то dll.

Дополнительная информация может помочь получить ответ немного быстрее ...

EDIT:

После вашего редактирования за исключением я немного погуглил и наткнулся на этот поток , который предлагает несколько вариантов, но основной, который, казалось, вылечил его для некоторых (при условии, что у вас нет зависимости, которые не могут быть разрешены) заключается в том, что вы не запускаете утилиту установки от имени администратора:

Цитировать из темы:

Вы работаете с «обычным пользователем». Я предполагаю, что вы можете работать под учетной записью, которая является членом локальной группы администраторов, но с включенным Vista UAC даже администраторы работают от имени обычного пользователя, пока они не запустят приложение, которое делает явный запрос администратора - в этот момент вы обычно получите запрос на повышение прав администратора. InstallUtil.exe не помечен как явно требующий администратора, поэтому это не удается.

Либо создайте сценарий cmd, который запускает InstallUtil youService.exe, и задайте для сценария требование администратора, либо выполните «runas / user: Administrator cmd.exe» и запустите оттуда InstallUtil.

и если это не проблема, то другой парень предлагает:

Я обнаружил, что установка работает, когда я использую InstallUtil.exe в 32-разрядной среде, но генерирует исключение System.Reflection.ReflectionTypeLoadException при запуске InstallUtil.exe в 64-разрядной среде. Это настройка, которую мне нужно добавить в мой проект, или структура, которую я включаю, которая не поддерживается 64-битной версией? (хотя я думал, что это обратно совместимо).

Не уверен, поможет ли это, но вы никогда не знаете ...

0 голосов
/ 24 февраля 2011

Не используйте installutil из папки Framework 64. используйте обычную папку Framework. Он должен работать оттуда, несмотря на то, что вы работаете на 64-х компьютерах.

0 голосов
/ 26 мая 2010

Начиная с версии .NET Framework 2.0, 32-разрядная версия общеязыковой среды выполнения (CLR) продолжает поставляться только с 32-разрядной версией инструмента Installer, но поставляется с 64-разрядной версией CLR. как с 32-битной, так и с 64-битной версией инструмента Installer. При использовании 64-разрядной среды CLR используйте 32-разрядную программу установки для установки 32-разрядных сборок и 64-разрядную программу установки для установки 64-разрядных сборок и промежуточных языковых сборок Microsoft. В противном случае обе версии инструмента установщика ведут себя одинаково.

Источник

...