• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Сетевой принтер

  • Автор темы WoodooMan
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

WoodooMan

как определить состояние сетевого принтера, включен он или нет, например, а то при работе с FastReport при попытке печати генерится эксепшен, который даже перехватить не удается, и прога уходит в глубокий даун... пробывал апишными функциями, но ничего не выходит... уже год морочаюсь с этой исключительной ситуацией, может тут уже с таким сталкивался?
 
E

EugenOS

хм...а по-подробнее нельзя? Доводилось около года обслуживать и править по-мелочам чужую прогу на дельфях седьмых с фастрепортами, так там
у меня три принтера было на контору(естессно сетевых) подобных проблем не припомню....кое-какие исходники остались, может чем смогу помочь...
 
W

WoodooMan

вообщем при печати время от времени возникает exception, который даже не перехватывается... просто прога в даун уходит и все... отчеты делаю на quickreport 4, народ у меня работает либо с сетевыми принтерами, либо в терминальном режиме, я, конечно, могу преположить, что это мой косяк, потому что при печати в режиме отладки та же фигня, но я в принципе ничего особого и не делаю... формирую данные и показываю отчет в preview... и состояние принтера не получается определить... апишными функциями пробывал, они показывают, что все хорошо, даже при выключенном принтере, если он сетевой (но это из-за printspooler, ИМХО)... покажите на крайняк как с помощью апи на принтер документ отправлять, мне лишь бы глюк побороть...
 
E

EugenOS

то есть как это не перехватывается(именно это я и просил "по-конкретнее")?
Код:
try
{
Запуск_печати();
}
catch(...)
{

}
не перехватывает?
тут три варианта:
1) данный эксепшн - суть есть внутреннее сообщение фастрепортов, а не эксепшн как таковой (т.к. любой необработаный эксепшн должен был быть перехвачен)
2) ваша программа создана как не полностью "релизный" вариант, т.е. использует какие-то отладочные библиотеки. В режиме отладки, несмотря на перехват, борланды все равно выдают сообщения об эксепшенах. Попробуйте изменить настройки проэкта для "конечного продукта": убрать рантайм пакейджи, дебаг библиотеки и.т.п.
3) Что-то в фаст репортах или драйвере принтера накердыкивается так, что уже не может подняться.

Попробую покопать, но только на работе (дома вообще принтера нет, т.к. нужды не имею; как и сети - rак-то нечего объединять, дочка на своем компе мультики смотрит, а я на своем работаю :rolleyes: )
 
W

WoodooMan

компилю я уже как готовый продукт, обижаешь начальник, на счет сообщения самого фаст репорта - вполне возможно, но ко мне приходит как access fiolation, и причем уже даже просмоторщик закрыть не получается, т.е. постоянно сыпит эксепшен, просто я вот именно, что писал report->print(); в try{ }catch(...) - не помогает... просто я из-за этого и перешел со стандартного для билдера 6 3-ей на 4-ую версию, но баг упорно преследует... хотя можно предположить и мою криворукость, просто уже чего я только не пробывал, а хотя бы изолировать это выпадание - не могу... а пользаки ворчат...
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
похоже, что фастрепорт кидает SEH-исключение
 
W

WoodooMan

ну оно пишет external exeption... вот интересно, можно ли его перехватить или как-то проверить, чтобы свою ошибку сказать и прога выжила...
 
W

WoodooMan

в том-то и беда, что не получается, даже нашел ее обозначение сейчас в windows.pas - STATUS_INVALID_HANDLE... если бы перехватывало, то я не видел бы этого проклятого виндозного окна с сообщением, что у вас исключительная ситуация по коду $C0000008
 
E

EugenOS

компилю я уже как готовый продукт, обижаешь начальник
Из ранних сообщений это было не очевидно, вот я и выдал все варианты которые пришли в голову.
А раз исключение - Invalid Handle - значит можно попробовать посмотреть на значение этого хэндла, может там действительно инвалид?
тогда можно этим воспользоваться, сначала получить этот хандл и по нему проверить валид он или инвалид.....

как вариант попробуй воспользоваться классом принтера из фаст репортов
Код:
class TfrxPrinter:public TfrxCustomPrinter

с двумя конструкторами:
TfrxPrinter(void);
TfrxPrinter(const AnsiString AName, const AnsiString APort);

и полем 
Handle

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

WoodooMan

Народ, а может такое быть из-з того, что я создавал не через report форму, а вручную мастерил ее... а на счет принтеров - я даже подкладывал TPrinter в отчет, та же фигня... просто я вчера в очередной раз гуглил инет... не я один такой уникальный, многие попали по этим ловушкам ядра...
 
E

EugenOS

Помню что обещал посмотреть...но все никак не хватает времени серьезно глянуть, а не серьезно естессно результат нулевой. На днях разгребусь и ш=гляну. Прошу прощения. :) :)
 
W

WoodooMan

EugenOS , да все нормально, уже год с глюком борюсь переодически, так что не горит
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!