Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Вкратце чтоб хоть было ясно о чем. Есть служба "Fax". (fxssvc.exe) Для нее пишется Dll, своя, назовем ее MyExtension.dll Using the Fax Routing Extension API Библиотека MyExtension.dll написана (все согласно SDK и с использованием примера), отрабатывал ее как x64 (потому что на Win10 x64 сижу, а там вызывающий процесс fxssvc.exe 64-битный). Компилируется в VC++2005 (name="Microsoft.VC80.CRT" version="8.0.50727.762") -потому что собаку с этим съел - для гарантированной совместимости со всеми OS. Одинаковые конфигурации, один проект, различается только "x64 Release" и "Win32 Release". Имеем: x64 на x64 -dll загружается, Extension работает как задумано. И на Win2003 x64, и на Win10/2016 x64 (и не сомневаюсь что на всех что между). Как часики. А счас начал проверять "Win32 Release". На Win XP/Win 2003 x86 Что происходит при старте "Fax". (fxssvc.exe) Судя по логу MyExtension(32).dll загружается, т.е. ф-ции инициализации FaxExtInitializeConfig/FaxRouteInitialize отрабатывают, а на этом этапе ничего больше и не требуется, а вот следующую dll (назовем ее MyFSP(32).dll, грузится сразу следом) - сервис fxssvc.exe даже не начинает загружать (лог отсутствует). Служба "Fax" якобы "запущена", но ничего не работает. Если убрать (разрегистрировать ) MyExtension(32).dll, то MyFSP(32).dll грузится OK и все работает. На Win10 x86 веселее. Что происходит при старте "Fax". (fxssvc.exe) Судя по логу MyExtension(32).dll загружается, т.е. ф-ции инициализации FaxExtInitializeConfig/FaxRouteInitialize отрабатывают, а на этом этапе ничего больше и не требуется, следующую dll (MyFSP(32).dll, грузится сразу следом) - сервис fxssvc.exe начинает грузить как и положено (т.е. лог появляется, но только в теч. первых 100мс). После чего (если запускать службу Fax из консоли MMC ->Services) сервис (вызывающий процесс fxssvc.exe) рушится: Error 1067: The process terminated unexpectedly. В журнале имеем это: Log Name: Application Source: Microsoft Fax Date: 8/8/2017 1:34:53 PM Event ID: 32108 Task Category: Unknown Level: Error Keywords: Classic User: N/A Computer: SERVER1 Description: The Fax Service encountered a problem and needed to close. Error Code: 0x00000000 This error code indicates the cause of the error. A Windows Error Report was generated with full details about the problem. The Fax service will restart now. Log Name: Application Source: Application Error Date: 8/8/2017 1:34:53 PM Event ID: 1000 Task Category: (100) Level: Error Keywords: Classic User: N/A Computer: SERVER1 Description: Faulting application name: fxssvc.exe, version: 10.0.15063.0, time stamp: 0xac13f85f Faulting module name: fxssvc.exe, version: 10.0.15063.0, time stamp: 0xac13f85f Exception code: 0xc0000005 Fault offset: 0x00046e85 Faulting process id: 0x1fdc Faulting application start time: 0x01d31031f87af2a1 Faulting application path: C:\Windows\system32\fxssvc.exe Faulting module path: C:\Windows\system32\fxssvc.exe Report Id: c2d07d2a-f587-43ee-83cb-a7608f2a0e1b Faulting package full name: Faulting package-relative application ID: Log Name: Application Source: Windows Error Reporting Date: 8/8/2017 1:34:53 PM Event ID: 1001 Task Category: None Level: Information Keywords: Classic User: N/A Computer: SERVER1 Description: Fault bucket , type 0 Event Name: APPCRASH Response: Нет данных Cab Id: 0 Problem signature: P1: fxssvc.exe P2: 10.0.15063.0 P3: ac13f85f P4: fxssvc.exe P5: 10.0.15063.0 P6: ac13f85f P7: c0000005 P8: 00046e85 P9: P10: Если убрать (разрегистрировать ) MyExtension(32).dll, то MyFSP(32).dll грузится OK и все работает. Я понимаю что сумбурно объясняю, что мало кто в этом чего понимает. Но я даже не знаю как искать причину. Абсолютно один и тот же проект. (2 месяца над ним работал, ну не одна dll естественно, но эта dll -это основная начинка) Сделан из стандартного шаблона Win32 Dll в VC++ 2005. x64 версия на x64 -как часики такая же точно Win32 - такая подстава. Т.е. если "Fax" fxssvc.exe на 32-бит системе загружает MyExtension(32).dll, то он либо тупит (на XP/2003 Win32), либо рушится (на Win10 Win32). Проблема явно не в версии OS. И не в рантайме (8.0.50727.762 абсолютно надежен). Счас пока думаю сделать с нуля "пустую dll", естественно с требуемым набором экспортируемых ф-ций, но с отсутствием кода в них, ну м.б. элементарный лог (хотя crash и без лога вероятно будет). Но с кодом как таковым вряд ли что-то не так. Еще вероятно должен быть какой-то debug для "Fax" fxssvc.exe, но не уверен что винды его генерируют да еще на таком уровне чтоб это ткнуло в проблему, не нашел пока. Dll то моя, а процесс ее запускающий - виндовский. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 15:17 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
авторException code: 0xc0000005 Если не путаю это обращение к несуществующей памяти. Т.е. или твоя DLL куда-то не туда полезла, или заставила полезть EXE. Сделай функцию записи в лог (открыл файл, записал строку, закрыл) и навтыкай ее вызов везде в коде. Постепенно вычислишь в какой момент вылетает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 15:26 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Dll то моя, а процесс ее запускающий - виндовский. ничего страшного, студийный отладчик умеет цепляться к запущенному процессу в том числе и к сервису ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 15:29 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TСделай функцию записи в лог (открыл файл, записал строку, закрыл) и навтыкай ее вызов везде в коде. Постепенно вычислишь в какой момент вылетает. Так есть этот лог. Код: plaintext 1. 2. 3. 4. Лог показывает, что обе ф-ции инициализации отрабатывают, а при старте сервиса от этой dll больше ничего и не требуется. А exe рушится потом, на Win10 минимум через + 100мс (потому что успевает начать грузить следующую dll что отражено в ее логе). А на XP он и грузить следующую не хочет (но и не рушится). Если только предположить, что пытается вызвать еще что-то, чего там нет (или что там прописано неправильно с т.зр. Win32). Т.е. до строчки Enter--- дело не доходит. Но эта штука ж так устроена, что если не найдет в dll какой-либо обязательной экспортируемой ф-ции, то вообще ее грузить не будет. Идей пока нет. ИзопропилДмитрий77Dll то моя, а процесс ее запускающий - виндовский. ничего страшного, студийный отладчик умеет цепляться к запущенному процессу в том числе и к сервису Не стоит у меня студий на тестовых системах во избежании "необъективных тестов" (а x86 - только тестовые), можно конечно поставить но пока не уверен что надо начинать эту эпопею. да и не шибко умею работать с этими "отладчиками". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 16:12 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Еще вероятно должен быть какой-то debug для "Fax" fxssvc.exe, но не уверен что винды его генерируют да еще на таком уровне чтоб это ткнуло в проблему, не нашел пока. Dll то моя, а процесс ее запускающий - виндовский. Если служба/процесс крашится, то почему в Windows не настроить для нее автоматический сбор дампов и выполнять анализ в родной студии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 16:15 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Смотри FaxExtInitializeConfig, похоже там даются какие-то неправильные настройки для EXE и когда он ими пытается воспользоваться, то вылетает. PS Как понимаю тоже самое скомпилированное под x64 работает, поэтому исключаем вариант что какие-то настройки не сделаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 16:19 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TСмотри FaxExtInitializeConfig, похоже там .. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. Там ничего умного нету. "Отсебятиной" является открытие записи в лог. (до первого ROUTEDEBUG) Судя по тому, что лог он пишет, с этим все хорошо. Если про создание лога убрать, краш никуда не девается. Идея у меня пока убрать вообще весь код, оставив только "пустой скелет", чтоб он ее просто загружал хотя бы без краша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 16:43 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Не стоит у меня студий на тестовых системах во избежании "необъективных тестов" на виртуалке поставь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 16:46 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, у тебя в конце Код: plaintext 1. т.е. после того как весь код уже отработал. Если FaxRouteInitialize Enter по такому принципу выводится, то ошибка может быть в начале FaxRouteInitialize() эта строчка должна быть первой в коде функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 16:59 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Изопропил, нафиг мне виртуалки, у меня круче есть 20584577 Собрал таки себе новый комп для тестов, не топовый конечно. Intel CPU3260 + мать Gigabite H81 + 8ГБ ОЗУ DDR3 + Nvidia GT730 Asus 2GB GDDR3 (лучшее без кулера) Конфигурацию выбрал не случайно, т.к. это последнее на что накатывается все подряд от XP (с драйверами!!!) до Win10 Диск 1 TB разбил на 22!!! логических ~ по 40GB (достаточно для одной OS). Буквы A,B - зарезервированы лучше не использовать Z-всегда ставится под DWD-ROM. Остается одна Y под флэшку. + я понял она еще нужна при загрузке с CD (установка OS). Дык вот, 16 разных OS "от XP до Win10" я туда успешно накатал ... Короче у меня есть почти все комбинации кроме 32-битной висты и 2008-х (без R2) серверов - на это "уе..ище" моральных сил бы не хватило. Хотя 2008-й видимо придется ставить, потому что это единственный 32-битный сервер NT>=6.0, а раз такие проблемы с 32-битной dll, то он будет не лишним для тестов (многолинейность и визуальность Fax Service есть только на серверах). Ну, понятно, что одну 32-битную ось я могу позволить себе "изгадить" (потом если что и переустановить можно). Пока не хочу по этому пути идти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 17:13 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Ну, понятно, что одну 32-битную ось я могу позволить себе "изгадить" (потом если что и переустановить можно). Пока не хочу по этому пути идти. В виртуалке можно снимок диска сделать, потестить что надо и затем откатиться к исходному состоянию. В твоем случае тоже можно: перелей образ раздела с нужной ОС на какой-нибудь HDD и там тести. Или просто забэкапь, потом восстановишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 17:17 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TДмитрий77, у тебя в конце Код: plaintext 1. т.е. после того как весь код уже отработал. Если FaxRouteInitialize Enter по такому принципу выводится, то ошибка может быть в начале FaxRouteInitialize() эта строчка должна быть первой в коде функции. Там нету "кода". Там только код открытия записи в лог-файл. Как я ROUTEDEBUG в файл выведу, не открыв этот самый файл Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. Код, это Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 17:23 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TВ твоем случае тоже можно: перелей образ раздела с нужной ОС на какой-нибудь HDD и там тести. Или просто забэкапь, потом восстановишь. Че ее бэкапить то. Гадишь, форматируешь и заново ставишь (пару часов). Комп то тестовый, чище-лучше. Если это не XP то мультизагрузочное меню этим не испортишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 17:29 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Сделал пустышку. Проект приложен. Для регистрации - запустить файл TestRouteExt.reg (лежит в папке с проектом) (в моем случае ImageName C:\777\TestRouteExt.dll -поменять на реальный путь, где лежит Dll) Запустить службу "Fax". На x64 (x64 Release) -все OK. Файл "закушен" на время работы службы и не мешает ее работе. На Win32 Win10 (Win32 Release) при попытке запуска службы Код: plaintext 1. На XP/2003 x86 пока не проверял, но результат прогнозируемый (думаю будет как описал в первом посте) Я компилирую VC++2005 (name="Microsoft.VC80.CRT" version="8.0.50727.762") Подключенные файлы : C:\Program Files\Microsoft SDKs\Windows\v6.1\Include\faxroute.h C:\Program Files\Microsoft SDKs\Windows\v6.1\Include\faxext.h VC++ Directories: C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin C:\Program Files\Microsoft SDKs\Windows\v6.1\Include C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib Идей нет. Ну только если попытаться повторить пустышку в 13-й студии (но это заведомо ненадежно) и хоть глянуть что будет на Win10-32. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. TestRouteExt.h Код: plaintext 1. 2. TestRouteExt.def (Linker -> Input -> Module Defenition File) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 18:54 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, call convention(WINAPI) для FaxExtInitializeConfig не задан в 64 бит - это пох, в 32 - важно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 20:17 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Изопропилcall convention(WINAPI) для FaxExtInitializeConfig не задан в 64 бит - это пох, в 32 - важно Вот я счас мувнул проект в 13-ю студию, он мне 32-бит компилировать не хочет testrouteext.cpp(29): error C2373: FaxExtInitializeConfig: переопределение; различные модификаторы типа c:\program files (x86)\windows kits\8.1\include\um\faxext.h(126): см. объявление "FaxExtInitializeConfig" Что конкретно и где надо дописать в 2005-й? (из SDK-шного примера вроде ничего существенного не выкидывал). Код: plaintext 1. Это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 20:37 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Это? да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 20:43 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Изопропил, Сильно теплее стало это точно. Понимаешь какое дело, в VS2013 (c:\Program Files (x86)\Windows Kits\8.1\Include\um\FaxExt.h) я счас подправил, он скомпилировался. И 32-битная 10-ка пустышку съела (файл закушен, сервис запустился). Но мне то надо VS2005, я подправил, теперь эта ругается 1>.\TestRouteExt.cpp(29) : error C2373: 'FaxExtInitializeConfig' : redefinition; different type modifiers 1> C:\Program Files\Microsoft SDKs\Windows\v6.1\Include\faxext.h(114) : see declaration of 'FaxExtInitializeConfig' А там нет WINAPI. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. (я файл из 6.1 прикрепил целиком). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 20:57 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Если в VS2005 сделать так //#include <faxext.h> а содержимое faxext.h скопировать в свой .h + добавить в своем h. файле эту самую WINAPI Код: plaintext 1. 2. 3. 4. 5. 6. то 32-битник компилируется, файл закусывается и сервис на Win10 32-бит уже не падает (на пустышке Win32 VS2005) По идее, каждая SDK под свою OS. 6.1 -кажется Win7 или Виста? но оно и на Win2003 не работало, и в "SDK Win2003" счас глянул тоже нет этой "WINAPI". Ошибки в старых SDK? Короче думаю надо делать этот "фокус с добавлением WINAPI и с правкой заголовочного файла", компилировать нормальную dll и смотреть корректность ее работы на разных 32-битках, предположительно заведется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 21:44 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, в SDK для 8-10 WINAPI ожидаемо прописано ошибка может быть идиотской - орлы из MS просто могли собирать околофаксовое добро указывая опцию компилятора /Gz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 22:27 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Если в VS2005 сделать так //#include <faxext.h> а содержимое faxext.h скопировать в свой .h + добавить в своем h. файле эту самую WINAPI Код: plaintext 1. 2. 3. 4. 5. 6. Вроде прокатило. Завелась моя dll на 32-битной 10-ке. Счас дистрибутив сделаю аккуратно и пойду смотреть что будет на XP/2003 x86. Изопропилошибка может быть идиотской - орлы из MS просто могли собирать околофаксовое добро указывая опцию компилятора /Gz Мож орлы, а мож козлы. Найдешь? Я не нашел. Оригинальный пример из sdk 7.1 приложен (ничего не менял), в более новых sdk че-то не вижу этих примеров. А ведь эти ж все примеры с упором именно на Win32 писались, и 2005-я студия для них родная. Т.е. имеем заведомо нерабочую поделку (я этого не заметил только потому что ваял на 64-битной 10-ке и контролировал на 16-м сервере). Эх, эти б все доки и API лет 10 назад... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 23:12 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
на XP/2003 x86 На Win2003 x86 -завелась. На XP x86 -вроде тоже, но что-то там не фурычит с RoutingExtension (виснет при выполнении метода), но это к вопросу здесь озвученному думаю отношения не имеет, надо код смотреть и тп. (на xp x64 работает, но это по сути сервер). На 32-битном xp есть ньюансы: там служба факса это System, а не Network Service (начиная с Win2003=NT5.2) Если верить докам, то Extension вообще не должны поддерживаться на клиентских OS. FaxServer.RegisterInboundRoutingExtension method FaxServer.UnregisterInboundRoutingExtension method This property is not supported in Windows XP, and will return the error: FAX_E_NOT_SUPPORTED_ON_THIS_SKU. (так и есть, и на любых Win7/Win10 то же самое) FaxRegisterRoutingExtension function FaxRoutingInstallationCallback callback function Дока по партизански молчит, но на XP/Win7/Win10 также стабильно генерит ошибку, на серверах OK. FaxUnregisterRoutingExtension function Ну эта вообще не поддерживается и опытно-hex-овым путем удалось понять, что нет ее в принципе нигде, ни A ни W, хотя аналогичная FaxUnregisterServiceProvider (в доках даже не упомянутая) очень даже присутствует (кроме XP-32) и вполне таки работоспособна. А суть в том что эта "регистрация" прекрасно прописывается в реестр "ручками" (по образу и подобию), после чего custom-extension абсолютно работоспособен на клиенте (во всяком случае на Win 10 x86/x64 и XP x64 без проблем, на Win7/8.1 не помешало б проверить но предположительно будет OK). Так что думаю и на XP-32 завести можно, пойду поковыряюсь что там не так (забивать на XP почему-то пока не хочу). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 01:24 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
На XP x86 -вроде тоже, но что-то там не фурычит с RoutingExtension (виснет при выполнении метода), но это к вопросу здесь озвученному думаю отношения не имеет, надо код смотреть и тп. Нашел причину, понатыкав в Debug текстов. На XP (x86) код (вместе со службой факсов) мертво виснет на строчке (на других OS - даже на Win2003 x86 -не виснет). Убрать - все работает. Код: plaintext 1. 2. Задумка авторов горе-примера из SDK видимо следующая: Routing Method типа выполняется долго: напр. факс конвертируют, пытаются распознать текст, посылают по мылу, печатают. За это типа немеренное время нечто может написать между строк (видимо другой факс принялся, потому что несколько методов для одного задания выполняются я так понял последовательно в порядке приоритетов в одном потоке, видимо еще когда метод включили/выключили - FaxRouteDeviceEnable тоже в лог пишет и т.п.). У меня алгоритм проще: я считываю RoutingInfo, копирую TIFF в другое место (оригинал удаляется при выходе из ф-ции), запускаю другой Exe (.Net, ну не готов я на C e-mail-ы отправлять) через CreateProcess, передав этому exe управление делами (окончания его работы не жду). На все про все согласно логу уходит от 0 до 16 миллисекунд в зависимости от компа и как фишка ляжет. Я вот думаю, вычислять версию OS или м.б. надежнее полностью выкинуть эту CriticalSection и иди она лесом? Потому как понимаю, deadlock схлопотать с этой кухней вероятность ненулевая (даже не на XP), а от случайной строчки (между строк) принципиального вреда не будет, да и вероятность этой случайности стремится к нулю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 03:21 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
или м.б. надежнее полностью выкинуть эту CriticalSection и иди она лесом? Толку от нее конечно немного, но причину понял. У меня, да и в SDK примере используется конструкция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Что по сути приводит к выполнению в одном потоке Код: plaintext 1. 2. (два метода, первый из кот. отключен) Я погуглил, люди исследовали, такая комбинация на XP недопустима (висяк обеспечен), на висте и выше пофиг (и видимо на Win2003 тоже) В общем если не выкидывать, то надо ставить EnterCriticalSection в начало ф-ции (до выполнения условия, по кот. можно уйти на Exit). Вот так по любому не виснет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 05:27 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, а ты развернул на тестовой системе тот же vcredist.exe x86, с библиотеками из которого была собрана твоя библиотека? Что говорит об этой ошибке виндовый лог? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 08:57 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Я вот думаю, вычислять версию OS или м.б. надежнее полностью выкинуть эту CriticalSection и иди она лесом? Сделай класс-обертку для управления. В конструктор передавай секцию, в методе enter() вход в секцию с контролем повторного вызова, в деструкторе освобождение секции. В коде будет примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Если компилятор поддерживает С++ 11, то можно использовать родные std::mutex и std::unique_lock Дмитрий77Потому как понимаю, deadlock схлопотать с этой кухней вероятность ненулевая (даже не на XP), Если одна секция, то deadlock невозможно устроить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:12 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) Version: 8.0.50727.762 Note : This package has the wrong version number (6.0.3790.0) but the contents of the package are the correct Visual Studio 2005 SP1 bits. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:17 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
rdb_devДмитрий77, а ты развернул на тестовой системе тот же vcredist.exe x86, с библиотеками из которого была собрана твоя библиотека? Что говорит об этой ошибке виндовый лог? Ничего не говорит, у меня они "универсальные". Дмитрий77Компилируется в VC++2005 (name="Microsoft.VC80.CRT" version="8.0.50727.762") -потому что собаку с этим съел - для гарантированной совместимости со всеми OS. (На XP/2003 гарантом работоспособности является наличие .Net Framework >=2.0 SP1 - проверено годами, на остальных - по дефолту) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:25 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, в DllMain (DLL_PROCESS_ATTACH) критическая секция инициализирована ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:25 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77(На XP/2003 гарантом работоспособности является наличие .Net Framework >=2.0 SP1 - проверено годами, на остальных - по дефолту)И всё же проверь наличие необходимых версий библиотек в "%SystemRoot%\WinSxS". Здесь удобный инструмент для поиска зависимостей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:29 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TСделай класс-обертку для управления. например так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:30 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TДмитрий77Я вот думаю, вычислять версию OS или м.б. надежнее полностью выкинуть эту CriticalSection и иди она лесом? Сделай класс-обертку для управления. В конструктор передавай секцию, Ну я вроде нашел грамотное решение, исключающее этот "косяк": 20709744 Что-то не так? >Если компилятор поддерживает С++ 11, то можно использовать родные std::mutex и std::unique_lock VS2005 - ясно что не поддерживает Компилируется в VC++2005 (name="Microsoft.VC80.CRT" version="8.0.50727.762") -потому что собаку с этим съел - для гарантированной совместимости со всеми OS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:32 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Dima Tпропущено... Сделай класс-обертку для управления. В конструктор передавай секцию, Ну я вроде нашел грамотное решение, исключающее этот "косяк": 20709744 Что-то не так? Надо следить чтобы количество вызовов Enter и Leave совпадало, иначе блокировка останется. Leave без Enter тоже не рекомендуется вызывать https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms684169(v=vs.85).aspx If a thread calls LeaveCriticalSection when it does not have ownership of the specified critical section object, an error occurs that may cause another thread using EnterCriticalSection to wait indefinitely. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:41 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
rdb_devДмитрий77, в DllMain (DLL_PROCESS_ATTACH) критическая секция инициализирована ? Она в FaxRouteInitialize инициализирована, как в MSDN примере. 20709620 (приложен) >И всё же проверь наличие Чего проверять. У меня клиенты 10 лет по миру эти "сборки" "проверяют", претензий не было. .Net Framework >=2.0 SP1 он устанавливает этот рантайм (.Net 3.5 содержит 2.0 >=SP1, там где .Net 3.5 уже нет (>=4.5) с этим рантаймом тоже все в порядке) !!! Не надо "Redistributable Package". Танцы с бубном при установке 2005-й студии (чтоб она накатала SP1 кажется, но не накатала "Обновление для Виста" и еще пару-тройку крайних "критических" обновлений), чтоб генерила именно эту сборку (на 10-ке надо отключать "Обновление для продуктов MS"). Но в моих топиках про это есть если поищешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:50 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TНадо следить чтобы количество вызовов Enter и Leave совпадало, иначе блокировка останется. Leave без Enter тоже не рекомендуется вызывать Ну так я именно эту задачу там и решил. Причина блокировки была пропуск Enter из-за перехода на метку Exit по условию и запуск Leave с последующим запуском Enter. Для XP это критично, для остальных пофиг, и SDK-писатели на это забили (sdk7.1 она для 7-ки типа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 09:56 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
На 32-битном xp есть ньюансы... Я вот чего еще не могу понять, хотя это сильно специфично Вот эта ф-ция FaxEnableRoutingMethod function Сорри за VB-код: Код: vbnet 1. 2. 3. 4. На 32-битном XP всегда возвращает FALSE, + код ошибки такой Код: vbnet 1. Но прикол в том, что то что от нее просят она как раз делает, т.е. метод включается и выключается как задумано. (на любых других OS включая 32-битный Win2003 такого глюка не происходит, возвращает TRUE). Видимо конечно надо забить, т.к. во-первых XP, а во-вторых отрабатывает то она правильно, но конечно странный глюк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 18:39 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, оффтоп: ты же нормально пишешь на С/С++, ну зачем тебе этот VB/VB.net? Это умершие ЯП, по ним никто особо не подскажет, т.е. или сам стань гуру или бросай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 21:07 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima T, Вопрос был по API ф-ции (в принципе уже оффтоп относит. вопроса темы). Можно подумать она на C/C++ чо-то другое вернет. Да не, на C/C++ я очень тяжело пишу. Только в тех случаях, когда нет выбора (как например в случае этой библиотеки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 21:16 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77 Код: vbnet 1. Ошибка свидетельствует об отсутствии факс-файла, на который указывает handle, в списке fax file list. На какой именно метод маршрутизации указывает ROUTEGUID? На тот, который ты реализовал сам через COM/OLE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 09:44 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Dima TДмитрий77, оффтоп: ты же нормально пишешь на С/С++, ну зачем тебе этот VB/VB.net? Это умершие ЯП, по ним никто особо не подскажет, т.е. или сам стань гуру или бросай.Подозреваю, что это у него legacy. Есть уже какая-то немаленькая программа на VB, в которую требуется вкрячить получение факса. Возможно, какая-то самописная программа документооборота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 09:49 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
rdb_devОшибка свидетельствует об отсутствии факс-файла, на который указывает handle, в списке fax file list. Ух ты как загнул то. Не, понятно что тебе эт не надо, но видимо придется объяснять, потому что не могу этот набор слов спокойно читать. А для наглядности картинка с Win2016 (визуальное управление есть только на Win Server, но работает кухня и на рабочих станциях XP/win10 тоже). FaxEnableRoutingMethod function RoutingGuid -это "метод", например "Store in a folder" или "Print" -для каждого метода свой уникальный GUID FaxPortHandle - возвращается из FaxOpenPort function , в которой есть параметр DeviceId - это факс девайс (напр. Fax Line 0 или Fax Line 1), модем то бишь если по старинке (но не обязательно модем). Короче, первые два параметра в FaxEnableRoutingMethod однозначно задают пару (имя девайса, имя метода). Метод может быть либо Enabled=yes, либо Enabled=no (см. картинку) FaxEnableRoutingMethod как раз и устанавливает yes/no (третий параметр) для пары (имя девайса, имя метода). Все. Ни о каком "факс-файле, на который указывает handle" там речь не идет, это чисто конфигурационная ф-ция. rdb_devНа какой именно метод маршрутизации указывает ROUTEGUID? На тот, который ты реализовал сам На любой. Меня конечно свои интересуют. Что касается XP-32, то yes/no то она там тоже меняет как заказано (функция то отрабатывает), но при этом false+Error2. Но думаю это глюк на кот. надо забить (не говоря о том что эта кухня на клиентах/не серверах xp/win7/win10 несколько "неофициальна", о чем написал здесь ). rdb_devчерез COM/OLE Я как раз счас избегаю Fax Service Extended COM Object Model , хотя они и "рекомендуют" и для того же VB, COM это "свое родное", с COM задолбаешься глюки лечить и ошибки отрабатывать. Вот это Fax Service Client API for Windows 2000 гораздо надежней. Не говоря о том, что для Fax Service Provider API и Fax Routing Extension API COM и VB/Net не применимо в принципе. Хотя была бы лазейка, написал бы эти dll на .Net. rdb_devПодозреваю, что это у негоНе надо меня ни в чем подозревать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 16:56 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Ух ты как загнул то. Не, понятно что тебе эт не надо, ...Пока не надо. Дмитрий77но видимо придется объяснять, потому что не могу этот набор слов спокойно читать.Чот я не обратил внимания, что handle к устройству, а не к файлу. Был невнимателен к чужой проблеме. Дмитрий77RoutingGuid -это "метод", например "Store in a folder" или "Print" -для каждого метода свой уникальный GUID FaxPortHandle - возвращается из FaxOpenPort function , в которой есть параметр DeviceId - это факс девайс (напр. Fax Line 0 или Fax Line 1), модем то бишь если по старинке (но не обязательно модем).RoutingGUID, это, таки, идентификатор зарегистрированного в системе метода маршрутизации факса. Дмитрий77rdb_devНа какой именно метод маршрутизации указывает ROUTEGUID? На тот, который ты реализовал сам На любой. Меня конечно свои интересуют. Что касается XP-32, то yes/no то она там тоже меняет как заказано (функция то отрабатывает), но при этом false+Error2. Но думаю это глюк на кот. надо забить (не говоря о том что эта кухня на клиентах/не серверах xp/win7/win10 несколько "неофициальна", о чем написал здесь ).И ошибка вылазит на XP при попытке включить любой из методов или только твой? При этом, в журнале Security Log системы возникает какая-нибудь запись по этому поводу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 10:25 |
|
||
|
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
|
|||
|---|---|---|---|
|
#18+
rdb_devRoutingGUID, это, таки, идентификатор зарегистрированного в системе метода маршрутизации факса. Естественно. rdb_devИ ошибка вылазит на XP при попытке включить любой из методов или только твой? При этом, в журнале Security Log системы возникает какая-нибудь запись по этому поводу? "Любой" метод ты на XP (или на Win10) без дополнительных танцев так не включишь. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fax\Routing Extensions\Microsoft Routing Extension Что касается FaxRouteEmail(Microsoft Routing Extension), он на этих OS жестко заблокирован в принципе (политика MS в отношении рабочих станций). Что касается FaxRouteStore(Microsoft Routing Extension) и FaxRoutePrint(Microsoft Routing Extension), то там требуется еще соотв. указать папку или принтер, без этого будет Error 1610 (Данные настройки для этого продукта повреждены. Обратитесь в службу поддержки). Для моих методов дополнительного указания чего либо для их включения не требуется (он либо запускает exe если включен, либо не запускает если выключен, а exe уже лезет в "свои настройки"). Но MS-метод можно выключить. Напр. можно выключить FaxRouteStore(Microsoft Routing Extension). Код: vbnet 1. 2. 3. 4. С FaxRouteStore(Microsoft Routing Extension) и на XP при выключении возвращает TRUE. А с моими методами на XP 1) выключает, как запрошено 2) но возвращает FALSE + Err 2 В журнале ничего нет. Если имел ввиду "не as Admin", то это Err.5, об этом речи не идет. Да забить на это надо. Ошибка ложная(на других OS ее не возникает, на Exit я в этом месте кода по любому не иду), функция свое дело все равно делает, академический интерес почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 16:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018104]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 292ms |

| 0 / 0 |
