首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Advapi32 (JNA API)在Java中更改现有Windows服务的用户名和密码

通过Advapi32 (JNA API)在Java中更改现有Windows服务的用户名和密码
EN

Stack Overflow用户
提问于 2018-11-13 20:17:02
回答 1查看 263关注 0票数 0

我一直在尝试通过JNA API更改现有Windows服务的配置,特别是通过com.sun.jna.platform.win32.Advapi32类,但找不到足够的文档来实现这一点。

同样可以通过在Windows CMD中运行'sc‘命令来实现:

代码语言:javascript
复制
sc config "MyServiceName" obj="domain\windowsuser" password= "userpassword"

到目前为止,这就是我在弄清楚Java代码(正在进行中)方面所达到的目标:

代码语言:javascript
复制
private static void printAllServices(String username, String password) {
    boolean success = false;
    SC_HANDLE serviceManager = openServiceControlManager(null, Winsvc.SC_MANAGER_ALL_ACCESS);
    if (serviceManager != null) {
        SC_HANDLE service = Advapi32.INSTANCE.OpenService(serviceManager, "MyServiceName",
                WinNT.GENERIC_EXECUTE);
        if (service != null) {
            SERVICE_STATUS serviceStatus = new SERVICE_STATUS();
            success = Advapi32.INSTANCE.ControlService(service, Winsvc.SERVICE_CHANGE_CONFIG, serviceStatus);
            Advapi32.INSTANCE.CloseServiceHandle(service);
        }
        Advapi32.INSTANCE.CloseServiceHandle(serviceManager);
    }
}

private static SC_HANDLE openServiceControlManager(String machine, int access) {
        return Advapi32.INSTANCE.OpenSCManager(machine, null, access);
    }

我的目标是通过Java API更改现有windows服务运行所使用的用户名/密码(但不是通过直接执行'sc‘命令,而是通过JNA API)。

任何方向正确的灯光(或文档参考)都会很有帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-11-15 18:48:45

由于Advapi32下似乎没有JNA API,因此调用了一个script.exe (传递所需的参数),该API包含对"advapi32.dll“执行DllImport的C#代码,并使用以下导入下的API

代码语言:javascript
复制
using System.Runtime.InteropServices;
using System.ComponentModel;

参考:https://www.morgantechspace.com/2015/03/csharp-change-service-account-username-and-password.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53280844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档