Hi all!
I want to make change of a description of a service. And to do this i must call:
C++ code
SERVICE_DESCRIPTION sd;
sd.lpDescription = (char*)SvcDescription.c_str();
ChangeServiceConfig2( hService, SERVICE_CONFIG_DESCRIPTION, &sd)
NSIS:
System::Call 'advapi32::ChangeServiceConfig2( hService, SERVICE_CONFIG_DESCRIPTION, &sd)'
The problem that i have is how do i declare in NSIS sd structure?
Structure definition
16 posts
See http://nsis.sourceforge.net/index.ph...&tx_faq_faq=35
One of the links on this page is for the Service Library which uses System and some structures.
Other System.dll structure examples can be found in Contrib\System.
One of the links on this page is for the Service Library which uses System and some structures.
Other System.dll structure examples can be found in Contrib\System.
When I can download nopey now?
Contact the author. If you can get a copy, I or another archive admin will upload it so it won't get lost again.
Who is author?
Nopey - system setting tool | | |
--------------------------------------------------------------------------------
Written by doberlec 2003-03-21 07:37:41 Last updated by joost 2003-10-08 13:03:52
Nopey - system setting tool | | |
--------------------------------------------------------------------------------
Written by doberlec 2003-03-21 07:37:41 Last updated by joost 2003-10-08 13:03:52
doberlec. I think he also has a forum user so you can use that to PM or e-mail.
Hi 🙂 !
I've got what you're looking for, altough I'm not the author...
I downloaded it a couple of months ago, and it is still on my HD.. 😁
evilO/Olive
I've got what you're looking for, altough I'm not the author...
I downloaded it a couple of months ago, and it is still on my HD.. 😁
evilO/Olive
evilO, thank you very much.
Thanks guys for information.
I tried to make my own job, but i have some difficulties. Can some of you tell me what i did wrong?
this is what i have to do from c++:
typedef struct _SERVICE_DESCRIPTION {
LPTSTR lpDescription;
} SERVICE_DESCRIPTION, *LPSERVICE_DESCRIPTION;
BOOL ChangeServiceConfig2(
SC_HANDLE hService, // handle to service
DWORD dwInfoLevel, // information level
LPVOID lpInfo // new data
);
and i did this in script:
!define SERVICE_ALL_ACCESS 0xF01FF
!define SC_MANAGER_ALL_ACCESS 0x3F
!define stSERVICE_DESCRIPTION "(t)i"
System::Call 'advapi32::OpenSCManagerA(n, n, i ${SC_MANAGER_ALL_ACCESS}) i'
IntCmp $1 0 lbl_done
StrCpy $2 "0x10"
StrCpy $3 "0x3"
StrCpy $4 $ServiceName
StrCpy $5 $ProjectName
StrCpy $6 $MyPath
System::Call `advapi32::CreateServiceA(i r1, t r4, t r5, i ${SERVICE_ALL_ACCESS}, i r2, i r3, i 0, t r6, n, n, n, n, n) i.r7`
StrCmp $7 0 lbl_done lbl_good
lbl_good:
System::Call '${stSERVICE_DESCRIPTION}("My Description") .r8'
System::Call 'advapi32::ChangeServiceConfig2( i r7, i 1, i r8) i.r9'
StrCmp $9 0 0 +1
lbl_done:
System::Call 'advapi32::CloseServiceHandle(i r1) n'
The service it is installing ok, but the description it is not working.
I tried to make my own job, but i have some difficulties. Can some of you tell me what i did wrong?
this is what i have to do from c++:
typedef struct _SERVICE_DESCRIPTION {
LPTSTR lpDescription;
} SERVICE_DESCRIPTION, *LPSERVICE_DESCRIPTION;
BOOL ChangeServiceConfig2(
SC_HANDLE hService, // handle to service
DWORD dwInfoLevel, // information level
LPVOID lpInfo // new data
);
and i did this in script:
!define SERVICE_ALL_ACCESS 0xF01FF
!define SC_MANAGER_ALL_ACCESS 0x3F
!define stSERVICE_DESCRIPTION "(t)i"
System::Call 'advapi32::OpenSCManagerA(n, n, i ${SC_MANAGER_ALL_ACCESS}) i'
IntCmp $1 0 lbl_done
StrCpy $2 "0x10"
StrCpy $3 "0x3"
StrCpy $4 $ServiceName
StrCpy $5 $ProjectName
StrCpy $6 $MyPath
System::Call `advapi32::CreateServiceA(i r1, t r4, t r5, i ${SERVICE_ALL_ACCESS}, i r2, i r3, i 0, t r6, n, n, n, n, n) i.r7`
StrCmp $7 0 lbl_done lbl_good
lbl_good:
System::Call '${stSERVICE_DESCRIPTION}("My Description") .r8'
System::Call 'advapi32::ChangeServiceConfig2( i r7, i 1, i r8) i.r9'
StrCmp $9 0 0 +1
lbl_done:
System::Call 'advapi32::CloseServiceHandle(i r1) n'
The service it is installing ok, but the description it is not working.
kichik,
thank you very much for the info. I saw that post but i still don't get it working. Can you help me with the right code :-( ... thanks
thank you very much for the info. I saw that post but i still don't get it working. Can you help me with the right code :-( ... thanks
Try this (NOT TESTED), probably at least it will be closer to work correctly:
(I read all about these APIs, I think it's really gonna work now)
!define SERVICE_ALL_ACCESS 0xF01FF
!define SC_MANAGER_ALL_ACCESS 0x3F
!define SERVICE_CONFIG_DESCRIPTION 1
!define stSERVICE_DESCRIPTION "(i)i"
System::Call 'advapi32::OpenSCManagerA(n, n, \\
i ${SC_MANAGER_ALL_ACCESS}) i'
IntCmp $1 0 lbl_done
StrCpy $2 "0x10"
StrCpy $3 "0x3"
StrCpy $4 $ServiceName
StrCpy $5 $ProjectName
StrCpy $6 $MyPath
System::Call `advapi32::CreateServiceA(i r1, t r4, t r5, \\
i ${SERVICE_ALL_ACCESS}, i r2, i r3, i 0, t r6, n, n, n, \\
n, n) i.r7`
StrCmp $7 "" 0 lbl_good
SetErrors
Goto lbl_end
lbl_good:
System::Call '*${stSERVICE_DESCRIPTION} .r8'
System::Call 'advapi32::ChangeServiceConfig2(i r7, \\
i ${SERVICE_CONFIG_DESCRIPTION}, i r8) i.r9'
StrCmp $9 0 0 +2
SetErrors
lbl_done:
System::Call 'advapi32::CloseServiceHandle(i r1) n'
lbl_end: It will set errors if the description wasn't put correctly or if it didn't found the service handle.(I read all about these APIs, I think it's really gonna work now)
thanks deguix for the code. I works almost perfect, but i still don't know how to set the value for the description in structure:
!define stSERVICE_DESCRIPTION "(i)i"
System::Call '*${stSERVICE_DESCRIPTION} .r8'
I want to have somethig like "My descripton there"
Thnaks
!define stSERVICE_DESCRIPTION "(i)i"
System::Call '*${stSERVICE_DESCRIPTION} .r8'
I want to have somethig like "My descripton there"
Thnaks
Try this:
!define DESCRIPTION "My Description"
!define SERVICE_ALL_ACCESS 0xF01FF
!define SC_MANAGER_ALL_ACCESS 0x3F
!define SERVICE_CONFIG_DESCRIPTION 1
!define stSERVICE_DESCRIPTION "(t)i"
System::Call 'advapi32::OpenSCManagerA(n, n, \\
i ${SC_MANAGER_ALL_ACCESS}) i'
IntCmp $1 0 lbl_done
StrCpy $2 "0x10"
StrCpy $3 "0x3"
StrCpy $4 $ServiceName
StrCpy $5 $ProjectName
StrCpy $6 $MyPath
System::Call `advapi32::CreateServiceA(i r1, t r4, t r5, \\
i ${SERVICE_ALL_ACCESS}, i r2, i r3, i 0, t r6, n, n, n, \\
n, n) i.r7`
StrCmp $7 "" 0 lbl_good
SetErrors
Goto lbl_end
lbl_good:
System::Call '*${stSERVICE_DESCRIPTION}("${DESCRIPTION}") .r8'
System::Call 'advapi32::ChangeServiceConfig2(i r7, \\
i ${SERVICE_CONFIG_DESCRIPTION}, i r8) i.r9'
StrCmp $9 0 0 +2
SetErrors
lbl_done:
System::Call 'advapi32::CloseServiceHandle(i r1) n'
lbl_end: thank you very, very much deguix.
evrything is working perfert!
evrything is working perfert!