Lotus Notes Java应用程序找不到notes.ini
所描述的系统都是带有Lotus Notes 8.5的Windows XP。
我有一个Java应用程序(下面的示例代码),它使用notes.jar与Lotus Notes交互。 该应用程序在c:\Program Files\Lotus\Notes
的Lotus安装目录中具有notes.ini
并且用户ID文件位于c:\Program Files\Lotus\Notes\Data
。 用户必须输入密码才能登录Lotus。 此系统将HKLM\Software\Lotus\Notes\MultiUser
设置为0
(单用户系统)。 在这台机器上,下面的代码在四个println
上显示了良好的值。
在问题系统上,此应用程序打印四个标题但空白四个值(用户名,密钥文件名,邮件文件和邮件服务器都是空白)。 此问题系统在D:\Data\johnsmith\NotesData
有notes.ini
和用户ID文件。 Lotus安装在C:\Program Files\Lotus\Notes
。 此问题系统还将HKLM\Software\Lotus\Notes\MultiUser
设置为1
(暗示它是多用户而不是单个用户)。 最后,在Lotus的文件 – >安全 – >用户安全对话框下,选中“使用您的操作系统登录登录到Notes”框(因此用户不输入密码登录Lotus)。
因此,似乎在问题系统中,找不到notes.ini
文件(因为notes.ini
是应该从中读取四个输出值的位置)。 我查看了Notes.jar
API并且看不到任何指定notes.ini
位置的方法。 notes.ini
所在的目录是在Windows PATH
,但这没有帮助。
任何帮助,将不胜感激。
import java.io.*; import lotus.domino.*; public static void main(String[] args) throws IOException { try { NotesThread.sinitThread(); Session session = NotesFactory.createSession(); System.out.println("Common user name: " + session.getCommonUserName()); System.out.println("KeyFilename: " + session.getEnvironmentString("KeyFilename", true)); System.out.println("MailFile: " + session.getEnvironmentString("MailFile", true)); System.out.println("MailServer: " + session.getEnvironmentString("MailServer", true)); } catch (Exception ex) { ex.printStackTrace(); } finally { NotesThread.stermThread(); } }
如原始问题中所述,如果HKEY_LOCAL_MACHINE\Software\Lotus\Notes\MultiUser
的值为1
,那么您将进行多用户安装(即使您是Lotus的唯一用户)。
这是一个有效的解决方案。 找到Notes.ini
的位置,可能是C:\Documents and Settings\(username)\Lotus
。 编辑或创建下面的字符串值并将其设置为Notes.ini
目录。 HKEY_CURRENT_USER\Software\Lotus\Notes\(optional-version)\NotesIniPath
。
在多用户环境中,Lotus Notes从NotesIniPath
注册表值中获取ini
文件名。
添加新的命令行参数“= c:\ data \ johnsmith \ NotesData \ notes.ini”。 要实现这一点,您需要使用NotesFactory.CreateSession(String host,String args [],String user,String passwd); 方法,在设置一个包含该参数的新String数组以及传递的其他任何参数之后,因为它基本上应该是传递给静态Main的String args []。 (= fullpath \ notes.ini参数只需要在数组中,它不需要在任何特定位置。)
这允许使用所使用的notes.ini文件的绝对路径初始化会话,并且似乎支持(因为我可能是错的)Notes 5.0.5。
值得注意的是,Directory =行将从notes.ini中获取并用作所有错误报告和日志记录,作为用户的私有数据目录。
你可以尝试一些事情:
-
Notes实际上附带了自己的JVM,我发现使用这个JVM使得Java应用程序可以更可靠地运行Notes类,因为任何最终需要的支持库都可以正确配置。
-
如果在您启动程序之前笔记已在运行,会发生什么情况。 此处有两种变体:选中或取消选中复选框“不提示输入其他基于Notes的程序的密码”。
-
在运行应用程序之前,请确保切换到
Notes.ini
所在的目录。 (并validation用户无法看到任何其他notes.ini
变量)