【问题标题】:Lotus Notes Java app can’t find notes.iniLotus Notes Java 应用程序找不到 notes.ini
【发布时间】:2010-07-15 21:03:19
【问题描述】:

所描述的两个系统都是带有 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 上显示了良好的值。

在一个有问题的系统上,这个应用程序打印四个标题,但四个值是空白的(用户名、密钥文件名、邮件文件和邮件服务器都是空白的)。这个问题系统有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();
  }
}

【问题讨论】:

    标签: java lotus-notes lotus lotus-domino


    【解决方案1】:

    如原始问题中所述,如果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 文件名。

    【讨论】:

      【解决方案2】:

      添加一个新的命令行参数 "=c:\data\johnsmith\NotesData\notes.ini" 。为此,您需要使用 NotesFactory.CreateSession(String host, String args[], String user, String passwd);方法,在设置一个包含该参数和传递的任何其他参数的新字符串数组之后,因为它基本上应该是传递给静态 Main 的字符串 args[]。 (=fullpath\notes.ini 参数只需要在数组中,不需要在任何特定位置。)

      这允许使用所使用的 notes.ini 文件的绝对路径来初始化会话,并且似乎从 Notes 5.0.5 开始支持(尽管我可能是错的)。

      值得注意的是,Directory= 行将取自该 notes.ini,并用于所有错误报告和日志记录,作为用户的私有数据目录。

      【讨论】:

        【解决方案3】:

        您可以尝试多种方法:

        1. Notes 实际上带有自己的 JVM,我发现使用这个 JVM 可以使 Java 应用程序通过 Notes 类更可靠地运行,因为任何最终需要的支持库都可以正确配置。

        2. 如果在您启动程序之前notes 已经在运行,会发生什么情况。这里有 2 种变体:选中或取消选中复选框“不提示输入其他基于 Notes 的程序的密码”。

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

        【讨论】:

        • 这些建议很好。不幸的是,它们都不起作用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多