Lotus Notes Java应用程序找不到notes.ini

时间:2010-07-15 21:03:19

标签: java lotus-notes lotus lotus-domino

所描述的系统都是带有Lotus Notes 8.5的Windows XP。

我有一个Java应用程序(下面的示例代码),它使用notes.jar与Lotus Notes交互。该应用程序在notes.ini的Lotus安装目录中具有c:\Program Files\Lotus\Notes且用户ID文件位于c:\Program Files\Lotus\Notes\Data的系统上正常运行。用户必须输入密码才能登录Lotus。此系统将HKLM\Software\Lotus\Notes\MultiUser设置为0(单用户系统)。在这台机器上,下面的代码在四个println上显示了良好的值。

在问题系统上,此应用程序打印四个标题但空白四个值(用户名,密钥文件名,邮件文件和邮件服务器都是空白的)。此问题系统具有notes.iniD:\Data\johnsmith\NotesData中的用户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();
  }
}

3 个答案:

答案 0 :(得分:2)

如原始问题中所述,如果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从ini注册表值中获取NotesIniPath文件名。

答案 1 :(得分:2)

添加新的命令行参数“= 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中获取并用作所有错误报告和日志记录,作为用户的私有数据目录。

答案 2 :(得分:1)

您可以尝试多种方法:

  1. Notes实际上附带了自己的JVM,我发现使用这个JVM可以使Notes类运行得更可靠,因为任何最终需要的支持库都可以正确配置。

  2. 如果在开始执行程序之前笔记已在运行,会发生什么情况。此处有两种变体:选中或取消选中复选框“不提示输入其他基于Notes的程序的密码”。

  3. 确保在运行应用程序之前切换到Notes.ini所在的目录。 (并验证用户无法看到任何其他notes.ini变量)