IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

CreateOleObject qui plante dans un service IIS


Sujet :

Langage Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut CreateOleObject qui plante dans un service IIS
    Bonjour,

    J'ai un bout de code qui prend un ODT et qui, en utilisant OpenOffice, l'exporte en PDF:
    Quand j'utilise ce code dans un exe, pas de problème, ça fonctionne.
    Je dois utiliser la même fonction dans une dll associée à IIS comme service web.
    Et là, ça plante directement sur le "CreateOleObject" pour un problème d'accès refusé.
    C'est évidemment une histoire de droits mais je ne sais pas comment régler ça.

    Une idée ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    procedure OpenOfficeExportToPDF(const ASourceFileURL: string; const ATargetFileURL: string);
    var
      StarOffice: Variant;
      StarDesktop: Variant;
      StarDocument: Variant;
      FilterParams: Variant;
      ExportParams: Variant;
      ExportObject: Variant;
     
      function CreateProperty(const AName: AnsiString; AValue: Variant): Variant;
      begin
        Result := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
        Result.Name := AName;
        Result.Value := AValue;
      end;
     
    begin
      StarOffice := CreateOleObject('com.sun.star.ServiceManager');
      StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
     
      FilterParams := VarArrayCreate([0, 0], varVariant);
      FilterParams[0] := CreateProperty('Hidden', True);
     
      StarDocument := StarDesktop.LoadComponentFromURL(ASourceFileURL, '_blank', 0, FilterParams);
     
      ExportParams := VarArrayCreate([0, 2], varVariant);
      ExportParams[0] := CreateProperty('Magnification', 2);
      ExportParams[1] := CreateProperty('EncryptFile', True);
      ExportParams[2] := CreateProperty('HideViewerWindowControls', True);
    //  ExportParams[3] := CreateProperty('DocumentOpenPassword', AnsiString('StackOverflow'));
     
      ExportObject := StarOffice.Bridge_GetValueObject;
      ExportObject.Set('[]com.sun.star.beans.PropertyValue', ExportParams);
     
      FilterParams := VarArrayCreate([0, 1], varVariant);
      FilterParams[0] := CreateProperty('FilterName', AnsiString('writer_pdf_Export'));
      FilterParams[1] := CreateProperty('FilterData', ExportObject);
     
      StarDocument.StoreToURL(ATargetFileURL, FilterParams);
     
      StarDocument.Close(True);
      StarDesktop.Terminate;
     
      StarDocument := Unassigned;
      StarDesktop  := Unassigned;
      StarOffice   := Unassigned;
    end;

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Citation Envoyé par Papy214 Voir le message
    J'ai un bout de code qui prend un ODT et qui, en utilisant OpenOffice, l'exporte en PDF:
    Quand j'utilise ce code dans un exe, pas de problème, ça fonctionne.
    Je dois utiliser la même fonction dans une dll associée à IIS comme service web.
    Et là, ça plante directement sur le "CreateOleObject" pour un problème d'accès refusé.
    C'est évidemment une histoire de droits mais je ne sais pas comment régler ça.
    AMHA, l'utilisateur Windows dédié à IIS (IUSR_*) a des droits insuffisants...

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Sans doute, mais des droits sur quoi ?

    J'ai donné toutes les autorisations à "Tout le monde" sur tout le répertoire d'OpenOffice et la même chose sur la clé de base de registre com.sun.star.ServiceManager et ça n'a rien changé.

  4. #4
    Membre éprouvé Avatar de Simara1170
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2014
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 423
    Points : 1 155
    Points
    1 155
    Par défaut
    je sais pas comment fonctionne IIS, mais ton fichier serait pas passé en lecture seule ou un truc du genre?

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Le fichier n'est pas en cause puisque l'erreur arrive dès la première ligne de la procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StarOffice := CreateOleObject('com.sun.star.ServiceManager');

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 831
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Peut-être une réponse ici si ta dll est 32 bits sur un serveur 64 bits.

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    ça aurait pu être une bonne piste mais la dll fonctionne très bien mis à part cette fonction.
    Elle reçoit des données du client, attaque une base de données pour sauver ces données, génère des rapports qui sont envoyés par email, récupère de nouvelles données à renvoyer au client. Il n'y a que cet appel COM qui est refusé.

  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut Solution (?)
    Bonjour,

    Pour éviter à d'autres les mêmes recherches inutiles, voici la solution :

    1. Désinstaller OpenOffice
    2. Installer LibreOffice


    Le même code fonctionnera alors sans problème.
    Ne me demandez pas pourquoi, je ne connais pas la réponse.
    Toujours est-il que mon problème est résolu comme ça.

    Sujet clos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/12/2009, 12h26
  2. Réponses: 1
    Dernier message: 18/02/2009, 19h32
  3. Service WCF qui ne fonctionne pas sous IIS
    Par Mozofeuk dans le forum Windows Communication Foundation
    Réponses: 11
    Dernier message: 05/12/2008, 12h29
  4. programme qui plante. chercher/remplacer dans des fichiers.
    Par [Hugo] dans le forum Général Python
    Réponses: 2
    Dernier message: 31/10/2006, 18h10
  5. [MySQL] Insertion dans bdd qui plante
    Par pssinjaune dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/04/2006, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo