我知道,当您将Domino作为作为本地帐户或不同用户运行的服务运行时,就会出现特定的问题。但是,在这里,我是以用户权限作为正常应用程序运行它的。然后,我从服务器控制台启动代理:tell amgr run etc。
我试图以两种方式枚举可用驱动器--作为文件系统根,使用Java功能和使用特定于Windows的wmic。有关守则是:
System.out.println("os:"+System.getProperty("os.name") + " user:" + System.getProperty("user.name"));
File[] roots = File.listRoots();
for (File root : roots) {
if (root.canWrite()) {
System.out.println("[rw] " + root.getPath());
} else {
System.out.println("[ro] " + root.getPath());
}
}
Process process = Runtime.getRuntime().exec(
new String[] { "wmic", "logicaldisk", "get",
"deviceid,volumename,volumeserialnumber" });
process.getOutputStream().close();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();如果从客户端(或简单地从独立的Java应用程序运行)运行,我将获得所有驱动器:
os:Windows 7 user:normunds
[rw] C:\
[ro] D:\
[rw] N:\
[rw] W:\
DeviceID VolumeName VolumeSerialNumber
C: Acer 12857911
D:
N: video EE1C7944
W: DB_70 18389143 其中N:“视频”是网络驱动器上的映射共享。
然而,当我在服务器(同一台PC)上运行它时,我只得到本地的,而不是远程smb驱动器:
19.11.2013 23:00:42 Agent Manager: Agent printing: os:Windows 7 user:normunds
19.11.2013 23:00:42 Agent Manager: Agent printing: [rw] C:\
19.11.2013 23:00:42 Agent Manager: Agent printing: [ro] D:\
19.11.2013 23:00:42 Agent Manager: Agent printing: [rw] W:\
19.11.2013 23:00:42 Agent Manager: Agent printing: DeviceID VolumeName VolumeSerialNumber
19.11.2013 23:00:42 Agent Manager: Agent printing: C: Acer 12857911
19.11.2013 23:00:42 Agent Manager: Agent printing: D:
19.11.2013 23:00:42 Agent Manager: Agent printing: W: DB_70 18389143 注意用户名,代码是以我的名字运行的;至少Java是这么想的。我不知道是什么引起了这个问题。
我甚至试图通过从LotusScript代码中调用Windows方法来编写另一个版本:具有相同结果的Declare Private Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (Byval nBufferLength As Long, Byval lpBuffer As String) As Long --从客户端它工作并返回它错过的服务器上的所有驱动器。我想还有一个步骤是询问Windows的用户名。更新:刚刚完成,它还返回"normunds“。
对如何处理这个问题有什么想法吗?
编辑:我认为正在发生的是Domino将服务器任务作为模拟服务器启动的用户的独立进程运行。通过这种方式,它关闭了对远程资源的访问,如果它运行具有(模拟的)委托级别的服务器任务,则这些资源是可用的。
现在,可以通过修改一些安全策略或注册表来改变这种情况吗?据我所知,在这种情况下,网络访问是以NullSession (匿名用户)的身份进行的,因此,我假设一种解决方案是在远程端启用匿名共享访问,并允许NullSession在本地访问该共享。编辑:似乎也没有帮助:-/
其他非常疯狂的解决方案是使用LogonUser Windows从代理重新登录同一用户,但拥有完全权限(不确定这是否可行,即使是这样,海事组织也意味着存储用户名/密码:-),是的,这将限制我们使用LotusScript解决方案,除非我们想安装JNI包装器;所有这些实际上都应该放在XPage中(代理只是问题的一个例子)。
第三种解决方案是使用UNC路径,而不是映射驱动器,并使用适当的用户名/密码(或匿名+允许NullSession访问)访问路径,但这种解决方案有点超出了我发现映射驱动器并根据可用驱动器的不同进行此或那样操作的目的。
发布于 2014-01-03 15:05:45
此问题是由于网络驱动器映射到Windows上的方式造成的。根据定义,后台服务无法访问网络驱动器,因为对象是在交互登录时映射的。
微软官方文档:
http://support.microsoft.com/kb/180362
更多信息可以在这里找到:
Map a network drive to be used by a service
在过去,我开发了几个windows服务,这是一个需要控制的约束。
我希望这能在某种程度上有所帮助。
莫里齐奥干杯
https://stackoverflow.com/questions/20083830
复制相似问题