Проблемы с сервисом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JIeT4uK
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 23.03.2003 (Вс) 4:48
Откуда: Украина, Донецк

Проблемы с сервисом

Сообщение JIeT4uK » 26.08.2005 (Пт) 18:33

Написал прогу , все нормально, возникла необходимость что бы она была постоянно запущена - сделал ее автозапуск через сервис, и теперь возникает проблема, прога грузится, появляется процесс, она выполняет свои действия , НО форма не появляется, с чем это может быть связано , а то тех действий что происходят до и после загрузки формы мне маловато, хотелось бы еще и по форме понажимать мышкой

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 26.08.2005 (Пт) 18:53

сервис не имеет форм

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.08.2005 (Пт) 18:58

в настройках сервиса можно указать
Interact with Desktop
только тебе это не поможет))))) так ничё в окне нажиматься не будет))))

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

sebas<-@->mail.ru

JIeT4uK
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 23.03.2003 (Вс) 4:48
Откуда: Украина, Донецк

Сообщение JIeT4uK » 26.08.2005 (Пт) 20:20

наверное я неправильно высказался, сервис у меня только запускает мою прогу, (что то типа Fire Demon) , а сама прога запускается уже от имени System, и имеет формы, или и в этом случае нельзя формы???

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.08.2005 (Пт) 20:48

это НЕПРАВИЛЬНЫЙ подход.

В след версиях виндовс, этого вообще не будет.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 29.08.2005 (Пн) 11:15

Согласно наследованию прав безопасности твой демон запустит любое приложение в СВОЁМ контексте безопасности - неинтерактивном ж-).

Разница - в "десктопе" - или родительском пространстве окон. По умолчанию сервисы стартуют в так называемом "Системном десктопе" тама они образую окна. Причём "нормальные" окна. Взаимодействия между десктопами нет. Оно убито. Сообщения не проходят из одного десктопа в другой. Можно наладить взаимодействие или же через файловую систему сокеты и может чего ещё.

Я исследовал разные аспекты этой проблемы - а наткнулся весьма неслучайно 8-))). Из под системного ДТ нельзя получить скриншат "нормального" рабоччего стола 8-))).

Функция ниже имеет параметр: DesktopType - он или стартанёт прилодение в дефолтовом для текущего процесса контексте безопасности (т.е. аналог Shell) или же он стартанёт с CurrentUserDesktopStation. У меня случай особый был - я работаю на уровне system и от уровня system и БЕЗ логона в систему - т.е. входа пользователя в неё нет 8-). Код я писал именно для возможности перехода из одного ДТ в другой. Не знаю поможет ли он в данном случае но копать надо сюда 8-)))!

Удачи!

Код: Выделить всё
Option Explicit

Const INFINITE = &HFFFF
Const STARTF_USESHOWWINDOW = &H1
Public Enum LType
    Explicit = 1
    Hidden = 0
    UD = 2
End Enum
Public Enum enSW
    SW_HIDE = 0
    SW_NORMAL = 1
    SW_MAXIMIZE = 3
    SW_MINIMIZE = 6
End Enum
Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type
Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
Public Enum enPriority_Class
    NORMAL_PRIORITY_CLASS = &H20
    IDLE_PRIORITY_CLASS = &H40
    HIGH_PRIORITY_CLASS = &H80
End Enum
Public Enum DType
    DefaultDesktopStation = 0
    CurrentUserDesktopStation = 1
End Enum

Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Public Function CP_Advanced(FileName As String, _
                            WorkDir As String, _
                            DesktopType As DType, _
                            Visibility As enSW, _
                            PriorityClass As enPriority_Class, _
                            Trace As Boolean, _
                            Optional WaitForCompletion As Boolean) As Boolean
   
    Dim pclass As Long
    Dim sinfo As STARTUPINFO
    Dim pinfo As PROCESS_INFORMATION
   
    'Setting Security Attributes
    Dim sec1 As SECURITY_ATTRIBUTES
    Dim sec2 As SECURITY_ATTRIBUTES
   
    If Trace = True Then
       
        If Right(App.Path, 1) <> "\" Then
            FileName = App.Path & "\" & FileName
        End If
       
    End If
   
    'Setting the structure size
    sec1.nLength = Len(sec1)
    sec2.nLength = Len(sec2)
    sinfo.cb = Len(sinfo)
   
    'Setting the Desktop Station Type
    '==================================
    If DesktopType = CurrentUserDesktopStation Then
        sinfo.lpDesktop = ""
    Else
        sinfo.lpDesktop = "WinSta0\Default"
    End If
    '==================================
   
    'Set the flags
    sinfo.dwFlags = STARTF_USESHOWWINDOW
   
    'Set the window's startup position
    sinfo.wShowWindow = Visibility
   
    'Starting the process
    Dim ret As Long
    ret = CreateProcess(vbNullString, FileName, sec1, sec1, False, PriorityClass, 1&, WorkDir, sinfo, pinfo)
    If ret <> 0 Then CP_Advanced = True
   
    If WaitForCompletion = True Then
   
        ret& = WaitForSingleObject(pinfo.hProcess, INFINITE)
       
    End If
   
End Function
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 14:00

Sebas, чё реально эту фишку уберут? Просто мне иногода нужны права system, у admin'а прав нет чтобы системному процессу изменить приоритет например. Я прогу накатал, чтобы TaskManager по хоткею запускал с правами System и интерфейс нормально работет, все кнопки нормально нажимаются - ничего не глючит. Придётся, видимо, мне оставаться на XP.
Программисты не глючат - глючат компиляторы...

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.08.2005 (Пн) 14:47

CodeName33 писал(а):Sebas, чё реально эту фишку уберут? Просто мне иногода нужны права system, у admin'а прав нет чтобы системному процессу изменить приоритет например. Я прогу накатал, чтобы TaskManager по хоткею запускал с правами System и интерфейс нормально работет, все кнопки нормально нажимаются - ничего не глючит. Придётся, видимо, мне оставаться на XP.


Канэшна, это ж дыра в безопасности. Юзер может управлять окнами SYSTEM.... Да и неправильно это в свете терминальных решений..
Да и вообще.

Делай клиент - сервер.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.08.2005 (Пн) 14:52

Да и не будет это никогда надёжно работать.

Я эксперементировал с запуском от службы с другими правами на раб стол... Тухляк.

Окно создаётся(его видно) но не ловит сообщения.. и много таких тем..
А вот, простейщий пример.

1.Открой папку в двух окнах експлорера, один текущего пользователя, другой от другого.
2. Сотри файл в этой папке (не в этих окнах)

ЧТо мы увидим? А то что в одном окне он исчезнет, а в другом окне останется. Сообщение перерисовки( или ещё чего там) недошло((((
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 14:54

Sebas Ну создавать клиент-сервер это лишний гемор. К тому же это не дыра в системе безопасности. Чтобы этим воспользоваться нужно установить сначала программу как сервис с взаймодействием с рабочим столом, а у пользователя нет на это прав. Только у админа - а админ знает, что делает. Зачем уж так прямо брать и запрещать.
Программисты не глючат - глючат компиляторы...

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 14:57

Sebas Это эксплорер так работает или у тебя такие глюки, у меня всё нормально работает - TaskManager,Regedit, Total Comander - работают точно также как и с правами юзера - никаких глюков интерфейсом замечено не было. Это фактически то же самое, что и запустить программу от имени другого пользователя.
Программисты не глючат - глючат компиляторы...

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.08.2005 (Пн) 15:09

CodeName33 писал(а):Sebas Ну создавать клиент-сервер это лишний гемор. К тому же это не дыра в системе безопасности. Чтобы этим воспользоваться нужно установить сначала программу как сервис с взаймодействием с рабочим столом, а у пользователя нет на это прав. Только у админа - а админ знает, что делает. Зачем уж так прямо брать и запрещать.


А ты никогда не ломал проги, например, кнопка недоступна. Послал ей сообщения, и ,о чЮдо, её можно нажать....
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 29.08.2005 (Пн) 15:21

Sebas - ломал! НО, это если админ захочет поставить такую прогу, (а почти любой грамотный админ знает об опасности hack'а привелегий и не будет ставить таких прог) то это уже на его совести будет, а вот мне на МОЙ собственный комп нужна прога у которой будут права SYSTEM. Я например хочу в реестре править кое, что куда меня не пускают с правами админа, мне теперь надо писать свой Клиент-Regedit, который будет сообщать моему серверу-Regedit'у что я в реестре хочу править, а так мне просто обычный Regedit запустить надо с правами SYSTEM.
Программисты не глючат - глючат компиляторы...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 58

    TopList  
cron