throw exceptions in jni, GetLastError may have changed by the time it returns to java land
This commit is contained in:
parent
10fde2cca9
commit
c74f93fdea
|
@ -159,6 +159,10 @@ JNIEXPORT jlong SIGAR_JNI(win32_Service_CreateService)
|
|||
env->ReleaseStringChars(displayName, (const jchar *)lpDisplayName);
|
||||
env->ReleaseStringChars(serviceName, (const jchar *)lpServiceName);
|
||||
|
||||
if (lResult == 0) {
|
||||
win32_throw_last_error(env);
|
||||
}
|
||||
|
||||
return lResult;
|
||||
}
|
||||
|
||||
|
@ -177,6 +181,10 @@ JNIEXPORT jlong SIGAR_JNI(win32_Service_OpenSCManager)
|
|||
lResult = (jlong)OpenSCManager(lpMachine, NULL, access);
|
||||
env->ReleaseStringChars(machine, (const jchar *)lpMachine);
|
||||
|
||||
if (!lResult) {
|
||||
win32_throw_last_error(env);
|
||||
}
|
||||
|
||||
return lResult;
|
||||
}
|
||||
|
||||
|
@ -188,12 +196,15 @@ JNIEXPORT jlong SIGAR_JNI(win32_Service_OpenService)
|
|||
jint access)
|
||||
{
|
||||
jlong lResult;
|
||||
|
||||
LPCTSTR lpService = (LPCTSTR)env->GetStringChars(service, NULL);
|
||||
lResult = (jlong)OpenService((SC_HANDLE)handle,
|
||||
lpService, access);
|
||||
env->ReleaseStringChars(service, (const jchar *)lpService);
|
||||
|
||||
if (!lResult) {
|
||||
win32_throw_last_error(env);
|
||||
}
|
||||
|
||||
return lResult;
|
||||
}
|
||||
|
||||
|
@ -302,6 +313,7 @@ JNIEXPORT jboolean SIGAR_JNI(win32_Service_QueryServiceConfig)
|
|||
if (!QueryServiceConfig((SC_HANDLE)handle, config,
|
||||
sizeof(buffer), &bytes))
|
||||
{
|
||||
win32_throw_last_error(env);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -79,10 +79,6 @@ public class Service extends Win32 {
|
|||
private Service() throws Win32Exception
|
||||
{
|
||||
this.manager = OpenSCManager("", SC_MANAGER_ALL_ACCESS);
|
||||
|
||||
if (this.manager == 0) {
|
||||
throw getLastErrorException();
|
||||
}
|
||||
}
|
||||
|
||||
public static native List getServiceNames() throws Win32Exception;
|
||||
|
@ -94,10 +90,6 @@ public class Service extends Win32 {
|
|||
this.service = OpenService(this.manager, serviceName,
|
||||
SERVICE_ALL_ACCESS);
|
||||
|
||||
if (this.service == 0) {
|
||||
throw getLastErrorException();
|
||||
}
|
||||
|
||||
this.name = serviceName;
|
||||
}
|
||||
|
||||
|
@ -143,10 +135,6 @@ public class Service extends Win32 {
|
|||
config.getServiceStartName(),
|
||||
config.getPassword());
|
||||
|
||||
if (service.service == 0) {
|
||||
throw getLastErrorException();
|
||||
}
|
||||
|
||||
if (config.getDescription() != null) {
|
||||
service.setDescription(config.getDescription());
|
||||
}
|
||||
|
@ -270,20 +258,11 @@ public class Service extends Win32 {
|
|||
|
||||
public ServiceConfig getConfig() throws Win32Exception {
|
||||
ServiceConfig config = new ServiceConfig();
|
||||
if (!QueryServiceConfig(this.service, config)) {
|
||||
throw getLastErrorException();
|
||||
}
|
||||
QueryServiceConfig(this.service, config);
|
||||
config.setName(this.name);
|
||||
return config;
|
||||
}
|
||||
|
||||
private static Win32Exception getLastErrorException()
|
||||
{
|
||||
int err = GetLastError();
|
||||
return new Win32Exception(err, "Win32 Error Code: " +
|
||||
err + ": " + GetErrorMessage(err));
|
||||
}
|
||||
|
||||
private static native boolean ChangeServiceDescription(long handle,
|
||||
String description);
|
||||
|
||||
|
@ -298,7 +277,7 @@ public class Service extends Win32 {
|
|||
String path,
|
||||
String[] dependencies,
|
||||
String startName,
|
||||
String password);
|
||||
String password) throws Win32Exception;
|
||||
|
||||
private static native int ControlService(long handle,
|
||||
int control);
|
||||
|
@ -306,16 +285,16 @@ public class Service extends Win32 {
|
|||
private static native boolean DeleteService(long handle);
|
||||
|
||||
private static native long OpenSCManager(String machine,
|
||||
int access);
|
||||
int access) throws Win32Exception;
|
||||
|
||||
private static native long OpenService(long handle,
|
||||
String service,
|
||||
int access);
|
||||
int access) throws Win32Exception;
|
||||
|
||||
private static native int QueryServiceStatus(long handle);
|
||||
|
||||
private static native boolean QueryServiceConfig(long handle,
|
||||
ServiceConfig config);
|
||||
ServiceConfig config) throws Win32Exception;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
List services;
|
||||
|
|
Loading…
Reference in New Issue