如何防止Java应用程序关闭?

5
如何防止用户使用任务管理器关闭我的可执行(exe)应用程序,即使他们有权限?
我通常使用Lunch4j将我的可执行jar文件转换为.exe文件,但alt+f4足以关闭程序。
我的问题是,在将其包装为exe之前,在Java中是否有任何编程方法,或者在系统配置中进行的操作,可以使其无法关闭“访问被拒绝”,或者标记应用程序作为系统服务如果在这种情况下有用吗?
谢谢

可能是如何防止用户关闭我的C#应用程序?的重复问题。 - Izzy
自从您颁发了悬赏以来,似乎有些东西失踪了... - ZF007
2个回答

10

一般来说,没有办法阻止有权限的用户终止您的进程。

因此,如果用户不是管理员,则运行进程在另一个用户上下文中即可(例如将其作为服务运行)。

正如本文所述,“您不能也不应该阻止管理员杀死您的进程或停止您的服务”。

话虽如此,您可以调整进程的访问控制列表以防止用户终止它。

显式地授予必要的权限并不让每个人(用户或应用程序)在您的系统中具有管理权限是一个好习惯。

通过使用这种做法,您可以轻松地防止几乎所有人终止您的进程。

您可以在此处找到更多信息关于 Microsoft Windows 安全模型和保护您的应用程序免受世界各地攻击的选项。


1
您可以调整您的进程访问控制列表,以防止用户终止它。非常棒的文章。 - TiyebM

0

您可能想要从Lunch4j编译器切换到“Yet Another Java Service Wrapper”。您可以在这里找到它。Lunch4j没有服务选项。请确保捆绑JRE(Java运行时环境),因为它是一个独立的程序。

查看操作系统用户选项。简而言之:

在MS-Windows上,默认情况下,如果未进行配置,则服务将在SYSTEM帐户下启动。 在Windows上,我们使用CreateProcessAsUserW函数。这需要...

SE_ASSIGNPRIMARYTOKEN_NAME和SE_INCREASE_QUOTA_NAME用户权限

我们不使用CreateProcessWithLogonW,因为命令行长度限制为1024个字符,这对于Java应用程序来说可能太短了。 密码由wrapper.ntservice.password属性定义。 如果密码在配置文件中定义,则在应用程序的命令行或Windows服务GUI中不可见。

根据问题的更改进行编辑:

请前往此处查看如何使用sc.exe将您的可执行文件转换为服务。您可以从命令行中运行该程序。


它不会作为可执行文件运行!我需要去服务中启动它吗?谢谢。 - TiyebM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接