【问题标题】:Prevent a user from terminating a java program?防止用户终止 java 程序?
【发布时间】:2011-10-21 04:07:59
【问题描述】:

我想在计算机上安装一个监控系统(该程序是一个 jar 文件)并在每次任何用户登录时在启动时运行它。但是,我不希望用户能够终止它,因为这样就无法再对其进行监控了。

我们尝试了几种方法:

  • 将其安装为服务 - 这里的问题是我们的程序不再工作;它无法连接到正在监视它的计算机。为此,我们使用了“Yet Another Java Service Wrapper”,并研究了其他一些可以帮助我们将其安装为服务的包装器。

  • 在启动时运行程序(使用文件夹启动),但不授予基本用户编辑/删除/弄乱文件的权限。但是,这似乎会减慢整个计算机的速度?当我们直接运行 bat 文件执行 jar 时,不会发生这种情况。另一个问题是用户可以直接进入任务管理器并杀死 java 进程。

  • 我们尝试了前一个的变体来解决进程被杀死的问题,方法是让另一个进程。一个将产生另一个,这两个进程将相互密切关注。如果一个终止,另一个会检测到它并运行它以再次启动它。尽管如果用户在再次重生之前足够快地杀死两个进程,则可能会出现问题,但更大的问题是有时连接到其他计算机时会出现问题。当它只有 1 个罐子时,我们没有这个问题。

有人知道如何解决这些问题吗?

这里的上下文是windows,但如果你对linux和mac有建议那就太好了!

【问题讨论】:

  • 您应该找出您的代码不能作为服务工作的原因。这是确保您的应用保持运行的标准 Windows 方式。
  • 它似乎在通过网络连接到其他计算机时出现问题。端口是开放的,但它没有收到任何东西。作为服务运行的程序是否受限于它们的功能?

标签: java windows jar installation startup


【解决方案1】:

方法是将程序作为服务运行。您应该调查您的应用程序和系统防火墙之间的任何问题。如果你激活了 windows 防火墙,你应该为 java.exe 或 javaw.exe 添加一个例外。

为了为您的程序提供提升的权限,您可以将服务设置为以其他用户身份运行。您可以从服务属性中的“登录”选项卡执行此操作。

【讨论】:

  • 感谢您的屏幕截图和有关在哪里可以找到设置的信息!我现在设法解决它......以提升的用户身份运行它不起作用。让它起作用的是我在使用本地系统帐户时必须勾选“允许服务与桌面交互”选项。这解决了它。非常感谢您的帮助!
  • Tanuki Software 创建了一个不错的程序来处理这个问题。wrapper.tanukisoftware.com/doc/english/download.jsp
【解决方案2】:

您需要让程序在具有提升权限的用户下启动。在 Windows 上,这将是管理员,Linux 将使用 root。在 Windows 上,您可能需要将其作为服务启动。但是我真的不知道为什么会阻碍网络通信。

【讨论】:

  • 感谢您的回复!现在解决了……原来不是网络通讯问题,但是收到的信息无法显示,所以我以为是网络问题。您对权限是正确的 - 我尝试再次将其作为 Windows 服务运行。让它起作用的是我必须勾选“允许服务与桌面交互”选项。这样就解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
相关资源
最近更新 更多