@ -906,7 +906,11 @@ int pre_edit_service(int argc, TCHAR **argv) {
mandatory = 3 ;
mode = MODE_RESETTING ;
}
else if ( str_equiv ( verb , _T ( " dump " ) ) ) mode = MODE_DUMPING ;
else if ( str_equiv ( verb , _T ( " dump " ) ) ) {
mandatory = 1 ;
remainder = 2 ;
mode = MODE_DUMPING ;
}
if ( argc < mandatory ) return usage ( 1 ) ;
const TCHAR * parameter = 0 ;
@ -1056,17 +1060,27 @@ int pre_edit_service(int argc, TCHAR **argv) {
int ret ;
if ( mode = = MODE_DUMPING ) {
TCHAR * service_name = service - > name ;
if ( argc > remainder ) service_name = argv [ remainder ] ;
if ( service - > native ) key = 0 ;
else {
key = open_registry ( service - > name , KEY_READ ) ;
if ( ! key ) return 4 ;
}
TCHAR quoted_service_name [ SERVICE_NAME_LENGTH * 2 ] ;
TCHAR quoted_exe [ EXE_LENGTH * 2 ] ;
TCHAR quoted_nssm [ EXE_LENGTH * 2 ] ;
if ( quote ( service_name , quoted_service_name , _countof ( quoted_service_name ) ) ) return 5 ;
if ( quote ( service - > exe , quoted_exe , _countof ( quoted_exe ) ) ) return 6 ;
if ( quote ( nssm_exe ( ) , quoted_nssm , _countof ( quoted_nssm ) ) ) return 6 ;
_tprintf ( _T ( " %s install %s %s \n " ) , quoted_nssm , quoted_service_name , quoted_exe ) ;
ret = 0 ;
for ( i = 0 ; settings [ i ] . name ; i + + ) {
setting = & settings [ i ] ;
if ( ! setting - > native & & service - > native ) continue ;
if ( dump_setting ( service - > name , key , service - > handle , setting ) ) ret + + ;
if ( dump_setting ( service _ name, key , service - > handle , setting ) ) ret + + ;
}
if ( ! service - > native ) RegCloseKey ( key ) ;