2010-07-15 9 views
2

Les deux systèmes décrits sont Windows XP avec Lotus Notes 8.5.L'application Lotus Notes Java ne trouve pas notes.ini

J'ai une application Java (exemple de code ci-dessous) qui utilise notes.jar pour interagir avec Lotus Notes. L'application fonctionne correctement sur un système qui a notes.ini dans le répertoire d'installation Lotus de c:\Program Files\Lotus\Notes et le fichier ID utilisateur est dans c:\Program Files\Lotus\Notes\Data. L'utilisateur doit taper un mot de passe pour se connecter à Lotus. Ce système a HKLM\Software\Lotus\Notes\MultiUser défini sur 0 (système mono-utilisateur). Sur cette machine, le code ci-dessous affiche de bonnes valeurs sur les quatre println.

Sur un système défectueux, cette application imprime les quatre en-têtes mais des espaces pour les quatre valeurs (le nom d'utilisateur, le nom de fichier de clé, le fichier de courrier et le serveur de courrier sont vides). Ce système de problème a notes.ini et le fichier ID utilisateur dans D:\Data\johnsmith\NotesData. Lotus est installé dans C:\Program Files\Lotus\Notes. Ce système de problème a également HKLM\Software\Lotus\Notes\MultiUser mis à 1 (ce qui implique qu'il est multi-utilisateur au lieu d'un seul utilisateur). Enfin, sous la boîte de dialogue Fichier -> Sécurité -> Sécurité de l'utilisateur, la case «Se connecter à Notes en utilisant votre système d'exploitation» est cochée (l'utilisateur ne tape pas de mot de passe pour se connecter à Lotus). Donc, il semble que sur le système de problème, le fichier notes.ini ne peut pas être trouvé (puisque notes.ini est l'endroit où les quatre valeurs de sortie sont censées être lues). J'ai regardé à travers l'API Notes.jar et je ne vois aucun moyen de spécifier l'emplacement de notes.ini. Le répertoire notes.ini réside dans Windows PATH, mais cela n'aide pas.

Toute aide serait appréciée.

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(); 
    } 
} 

Répondre

2

Comme mentionné dans la question initiale, si HKEY_LOCAL_MACHINE\Software\Lotus\Notes\MultiUser a une valeur de 1, vous disposez d'une installation multi-utilisateurs (même si vous êtes le seul utilisateur de Lotus).

Voici une solution qui a fonctionné. Trouver l'emplacement de Notes.ini, probablement quelque part comme C:\Documents and Settings\(username)\Lotus. Modifiez ou créez la valeur de chaîne ci-dessous et définissez-la sur votre répertoire Notes.ini. HKEY_CURRENT_USER\Software\Lotus\Notes\(optional-version)\NotesIniPath.

Dans un environnement multi-utilisateur, Lotus Notes obtient le nom de fichier ini à partir de la valeur de registre NotesIniPath.

1

Il y a un certain nombre de choses que vous pouvez essayer:

  1. Remarques vient en fait avec sa propre machine virtuelle Java et j'ai trouvé à l'aide de cette machine virtuelle Java rend les applications Java fonctionnent de manière plus fiable avec des classes Notes depuis une suite nécessaire bibliothèque de support serait correctement configuré. Que se passe-t-il si des notes sont déjà en cours d'exécution avant de démarrer votre programme? Il y a 2 variantes ici: Case à cocher "Ne pas demander un mot de passe à partir d'autres programmes basés sur Notes" est cochée ou non cochée. Assurez-vous de basculer vers le répertoire où le Notes.ini est à la maison avant d'exécuter l'application. (Et vérifier que l'utilisateur ne peut pas voir d'autres notes.ini des variables)

+0

Ce sont de bonnes suggestions. Malheureusement, aucun d'eux n'a fonctionné. –

2

Ajoutez un nouveau paramètre de ligne de commande, "= c: \ data \ johnsmith \ NotesData \ notes.ini".Pour ce faire, vous devez utiliser NotesFactory.CreateSession (String host, String args [], String utilisateur, String passwd); méthode, après la mise en place d'un nouveau tableau String contenant ce paramètre et tous les autres arguments passés, car il est fondamentalement supposé être le String args [] comme passé à static Main. (Le paramètre = fullpath \ notes.ini doit juste être dans le tableau, il n'a pas besoin d'être dans un emplacement spécifique.)

Ceci permet d'initialiser la session avec le chemin absolu des notes.ini fichier utilisé, et semble être pris en charge depuis (même si je peux me tromper) Notes 5.0.5.

Notamment, la ligne Directory = va être prise à partir de notes.ini et utilisée pour tous les rapports d'erreurs et la journalisation, en tant que répertoire de données privé de l'utilisateur.