Winservice C# и winforms exe
От: Luchnik Россия  
Дата: 09.12.21 15:19
Оценка:
В вин-сервисе есть код по загрузке сборок :

System.Reflection.Assembly.Load(assemblyName);


Если в качестве параметра передать exe c WinForms, то получаю ошибку:

'Could not load file or assembly 'CERudestaApp' or one of its dependencies. Была сделана попытка загрузить программу, имеющую неверный формат.'

Специально создавал простейшеe exe с одной формой. А если пытаемся загрузить winforms dll, то ошибки нет.
Куда смотреть, чтобы с этим справится?
winservice net winforms
Re: Winservice C# и winforms exe
От: Shmj Ниоткуда  
Дата: 09.12.21 15:32
Оценка:
Здравствуйте, Luchnik, Вы писали:

L>Специально создавал простейшеe exe с одной формой. А если пытаемся загрузить winforms dll, то ошибки нет.

L>Куда смотреть, чтобы с этим справится?

А зачем загружать?
=сначала спроси у GPT=
Re: Winservice C# и winforms exe
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 09.12.21 15:46
Оценка:
Здравствуйте, Luchnik, Вы писали:

L>Куда смотреть, чтобы с этим справится?

На логи Fuslog
Re[2]: Winservice C# и winforms exe
От: Luchnik Россия  
Дата: 09.12.21 17:32
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Luchnik, Вы писали:


L>>Специально создавал простейшеe exe с одной формой. А если пытаемся загрузить winforms dll, то ошибки нет.

L>>Куда смотреть, чтобы с этим справится?

S>А зачем загружать?


Нужно будет создать потом экземпляры некоторых классов из exe. Через рефлексию.
Re[3]: Winservice C# и winforms exe
От: Shmj Ниоткуда  
Дата: 09.12.21 17:36
Оценка:
Здравствуйте, Luchnik, Вы писали:

L>Нужно будет создать потом экземпляры некоторых классов из exe. Через рефлексию.


А оформить в виде библиотеки — никак? Можно дизассемблировать, чуток изменить и потом пересобрать ведь.
=сначала спроси у GPT=
Отредактировано 09.12.2021 17:37 Shmj . Предыдущая версия .
Re: Winservice C# и winforms exe
От: Mr.Delphist  
Дата: 09.12.21 17:49
Оценка: +1
Здравствуйте, Luchnik, Вы писали:

L>Специально создавал простейшеe exe с одной формой. А если пытаемся загрузить winforms dll, то ошибки нет.

L>Куда смотреть, чтобы с этим справится?

https://stackoverflow.com/questions/5797205/how-to-load-an-exe-as-a-net-assembly

You will need to make sure that the dependencies are also loaded into the app domain. If they aren't located automatically, you can subscribe to AppDomain.AssemblyResolve in order to find and load assemblies manually if needs be.


Сам не пробовал, но выглядит логичным.
Re: Winservice C# и winforms exe
От: vaa  
Дата: 10.12.21 02:11
Оценка:
Здравствуйте, Luchnik, Вы писали:


L>Специально создавал простейшеe exe с одной формой. А если пытаемся загрузить winforms dll, то ошибки нет.

L>Куда смотреть, чтобы с этим справится?


какая версия дотнета? exe точно .net-вый? может ваш сервис по битности не совпадает с exe. запустите и посмотрите в диспетчере какая битность у процессов.
может у вас сервис на корке, а винформ на классике или наоборот?
CERudestaApp может действительно зависеть от кучи сборок, которые не нашел.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Winservice C# и winforms exe
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.12.21 08:19
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Здравствуйте, Luchnik, Вы писали:


L>>Специально создавал простейшеe exe с одной формой. А если пытаемся загрузить winforms dll, то ошибки нет.

L>>Куда смотреть, чтобы с этим справится?

MD>https://stackoverflow.com/questions/5797205/how-to-load-an-exe-as-a-net-assembly


MD>

MD>You will need to make sure that the dependencies are also loaded into the app domain. If they aren't located automatically, you can subscribe to AppDomain.AssemblyResolve in order to find and load assemblies manually if needs be.


MD>Сам не пробовал, но выглядит логичным.

Да помнится через Reflection что то грузил из Win и не срабатывали какие то статические конструкторы уже непомню. Приходилось заранее их вызывать
и солнце б утром не вставало, когда бы не было меня
Re[2]: Winservice C# и winforms exe
От: Luchnik Россия  
Дата: 10.12.21 13:02
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, Luchnik, Вы писали:



L>>Специально создавал простейшеe exe с одной формой. А если пытаемся загрузить winforms dll, то ошибки нет.

L>>Куда смотреть, чтобы с этим справится?


vaa>какая версия дотнета? exe точно .net-вый? может ваш сервис по битности не совпадает с exe. запустите и посмотрите в диспетчере какая битность у процессов.

vaa>может у вас сервис на корке, а винформ на классике или наоборот?
Не, всюду простой 4 дотнет. И в сервисе, и в exe.

vaa>CERudestaApp может действительно зависеть от кучи сборок, которые не нашел.

Специально делал тестовый exe, простейший, с одной формой и без всяких дополнительных ссылок — тоже самое.
Re[3]: Winservice C# и winforms exe
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 10.12.21 13:17
Оценка:
Здравствуйте, Luchnik, Вы писали:

L>Не, всюду простой 4 дотнет. И в сервисе, и в exe.

Ну тогда не тратьте время на эксперименты, а просто настройте логи в Fuslog и посмотрите, какую именно сборку он не может загрузить и почему.
Это почти 100% будет на порядок быстрее.
Re[4]: Winservice C# и winforms exe
От: Luchnik Россия  
Дата: 10.12.21 16:50
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, Luchnik, Вы писали:


L>>Не, всюду простой 4 дотнет. И в сервисе, и в exe.

МР>Ну тогда не тратьте время на эксперименты, а просто настройте логи в Fuslog и посмотрите, какую именно сборку он не может загрузить и почему.
МР>Это почти 100% будет на порядок быстрее.

*** Assembly Binder Log Entry (10.12.2021 @ 19:44:07) ***

The operation failed.
Bind result: hr = 0x8007000b. Была сделана попытка загрузить программу, имеющую неверный формат.

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable C:\Projects\CE2006\ContourEnterpriseIV\WinService\CIVWinService\bin\Debug\CIVWinService.exe
--- A detailed error log follows.

=== Pre-bind state information ===
LOG: DisplayName = CERudestaApp
(Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: CERudestaApp | Domain ID: 1
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///C:/Projects/CE2006/ContourEnterpriseIV/WinService/CIVWinService/bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = CIVWinService.exe
Calling assembly : CECommon, Version=4.8.5.3389, Culture=neutral, PublicKeyToken=f5f4295dccc3a8ed.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\CE2006\ContourEnterpriseIV\WinService\CIVWinService\bin\Debug\CIVWinService.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Projects/CE2006/ContourEnterpriseIV/WinService/CIVWinService/bin/Debug/CERudestaApp.DLL.
LOG: Attempting download of new URL file:///C:/Projects/CE2006/ContourEnterpriseIV/WinService/CIVWinService/bin/Debug/CERudestaApp/CERudestaApp.DLL.
LOG: Attempting download of new URL file:///C:/Projects/CE2006/ContourEnterpriseIV/WinService/CIVWinService/bin/Debug/CERudestaApp.EXE.
LOG: Assembly download was successful. Attempting setup of file: C:\Projects\CE2006\ContourEnterpriseIV\WinService\CIVWinService\bin\Debug\CERudestaApp.exe
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: CERudestaApp, Version=4.8.5.922, Culture=neutral, PublicKeyToken=f5f4295dccc3a8ed
ERR: Invalid assembly platform or ContentType in file (hr = 0x8007000b).
ERR: Run-from-source setup phase failed with hr = 0x8007000b.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
Re[5]: Winservice C# и winforms exe
От: Luchnik Россия  
Дата: 10.12.21 17:04
Оценка: 5 (1) +1
Здравствуйте, Luchnik, Вы писали:

L>Здравствуйте, Михаил Романов, Вы писали:


МР>>Здравствуйте, Luchnik, Вы писали:


L>>>Не, всюду простой 4 дотнет. И в сервисе, и в exe.

МР>>Ну тогда не тратьте время на эксперименты, а просто настройте логи в Fuslog и посмотрите, какую именно сборку он не может загрузить и почему.
МР>>Это почти 100% будет на порядок быстрее.

Понял из-за чего. Сервис был Any CPU, а exe — x86.
Re[6]: Winservice C# и winforms exe
От: Shmj Ниоткуда  
Дата: 12.12.21 01:51
Оценка:
Здравствуйте, Luchnik, Вы писали:

L>Понял из-за чего. Сервис был Any CPU, а exe — x86.


Вот этот тип ошибок — один из самых распространенных. Все просто, но ты даже не думал об этом — искал в другом месте, в более сложных вещах.
=сначала спроси у GPT=
Re: Winservice C# и winforms exe
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.12.21 22:38
Оценка:
Здравствуйте, Luchnik, Вы писали:

L>System.Reflection.Assembly.Load(assemblyName);

L>Если в качестве параметра передать exe c WinForms, то получаю ошибку:
L>'Could not load file or assembly 'CERudestaApp' or one of its dependencies. Была сделана попытка загрузить программу, имеющую неверный формат.'

Ты бы версию дотнета то написал бы хотя бы.

Попробуй просто Process Explorer-ом посмотреть какие файлы там читаются (и обламываются).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.