我有一个Java应用程序,它在用户配置文件中的以下位置生成一个临时JNA文件夹和一个临时DLL文件:
第一个月
(the JNA文件夹和文件名分别包含随机数字作为后缀和前缀"jna--"、"jna")
JNA DLL文件"Path"需要在应用程序控制策略中设置为例外,特别是在AppLocker -> DLL Rules -> [Users] -> Exceptions
中,以便Java应用程序正常工作。目前,AppLocker阻止了该文件,但是,如果我将此路径添加到AppLocker,则它将适用于当前用户。
现在,这对于1个用户是可以实现的,但是我有许多用户的前缀为"ABC-",后缀"SOME-USER-ID"包含一个带有数字和字母的随机字符串,即许多前缀为"ABC-"的用户应该能够使用此应用程序,而无需将每个用户的配置文件路径手动添加到AppLocker配置中。
是否有方法可以将此路径"通配符"添加到AppLocker配置中?例如,类似以下内容:%OSDRIVE%\Users\ABC-<WILDCARD>\AppData\Local\Temp\jna--<WILDCARD>\jna<WILDCARD>.dll
或者甚至:%OSDRIVE%\Users\ABC-<WILDCARD>\AppData\Local\Temp\jna--<WILDCARD>\*
是否有通过通配符实现此目的的现实方法?我不希望在路径中使用**"*",因为这样会允许所有**用户从AppLocker设置中豁免。
任何帮助都很感激。
先谢了!
1条答案
按热度按时间z5btuh9x1#
根据我找到的the available documentation,AppLocker似乎只支持在路径的开头或结尾使用通配符(
*
),而不支持在中间使用通配符。但是,您可以将JNA本机库预解压缩到所有用户都知道的位置,而不是在AppLocker的路径中使用通配符。出于安全目的,这是一个相对常见的需求(正是您的意图),有时与临时目录访问权限有关,有时与签署二进制文件有关。
从JNA API概述加载JNA:
JNA包含一个小型的、特定于平台的共享库,它支持所有本地访问。当第一次访问Native类时,JNA将首先尝试从
jna.boot.library.path
中指定的目录加载此库。如果此操作失败,并且设置了jna.nosys=false
,它将退回到从系统库路径加载。最后,它将尝试从JNA jar文件中提取存根库,并加载它。这为您提供了两个选项来避免随机命名的临时文件。
-Djna.boot.library.path=C:\your\path
,或者在加载JNA之前在程序中调用System.setProperty("jna.boot.library.path", "C:\your\path")
。jna.nosys=false
。(您还可以设置jna.nounpack=true
以防止临时文件解压缩。)另外,JNA本地库将位于
java.io.tmpdir
系统属性指定的Java临时目录的子目录中。Environment variable to control java.io.tmpdir?这个问题的答案包括使用
_JAVA_OPTIONS
环境变量作为一种可能的方法来更改tmpdir,即使您运行的是可执行文件而不是Java命令行。