2010-07-15 77 views
2

這兩個系統都是帶有Lotus Notes 8.5的Windows XP。Lotus Notes Java應用程序找不到notes.ini

我有一個使用notes.jar與Lotus Notes交互的Java應用程序(示例代碼如下)。該應用在Lotus安裝目錄c:\Program Files\Lotus\Notes中的notes.ini以及用戶標識文件位於c:\Program Files\Lotus\Notes\Data的系統上工作良好。用戶必須輸入密碼才能登錄到Lotus。該系統有HKLM\Software\Lotus\Notes\MultiUser設置爲0(單用戶系統)。在這臺機器上,下面的代碼在四個println上顯示出很好的值。

在問題系統上,這個應用程序打印四個標題,但空白的四個值(用戶名,密鑰文件名,mailfile和mailserver都是空白的)。此問題系統有notes.iniD:\Data\johnsmith\NotesData中的用戶標識文件。 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(); 
    } 
} 

回答

2

正如原來的問題提到的,如果HKEY_LOCAL_MACHINE\Software\Lotus\Notes\MultiUser1值,那麼你有一個多用戶安裝(即使你是Lotus的唯一用戶)。

這是一個可行的解決方案。找到Notes.ini的位置,可能是C:\Documents and Settings\(username)\Lotus之類的地方。編輯或創建下面的字符串值並將其設置爲您的Notes.ini目錄。 HKEY_CURRENT_USER\Software\Lotus\Notes\(optional-version)\NotesIniPath

在多用戶環境中,Lotus Notes從NotesIniPath註冊表值中獲取ini文件名。

1

有一些事情你可以嘗試:

  1. 注意事項其實都有自己的JVM,我發現使用該JVM使Java應用程序與Notes類運行更可靠,因爲任何最終需要支持庫將被正確配置。

  2. 如果在啓動程序之前筆記已經在運行,會發生什麼情況。此處有兩個變體:複選框「不要提示輸入其他基於Notes的程序的密碼」複選框或未選中。

  3. 確保在運行應用程序之前切換到Notes.ini所在的目錄。 (並確認該用戶不能看到任何其他notes.ini變量)

+0

這些都是很好的建議。不幸的是他們都沒有工作。 – 2010-08-17 16:16:17

2

添加一個新的命令行參數「= c:\ data \ johnsmith \ NotesData \ notes.ini」。要做到這一點,你需要使用NotesFactory.CreateSession(String host,String args [],String user,String passwd);方法,在建立一個包含該參數的新字符串數組以及任何其他參數傳遞後,因爲它基本上應該是傳遞給靜態Main的String args []。 (= fullpath \ notes.ini參數只需要在數組中,它不需要位於任何特定的位置。)

這允許會話初始化爲notes.ini的絕對路徑使用的文件,似乎受到支持,因爲(雖然我可能是錯的)Notes 5.0.5。

值得注意的是,Directory =行將從notes.ini中提取,並用於所有錯誤報告和日誌記錄,作爲用戶的私有數據目錄。