Récupérer le CLSID d'un objet d'une machine distante
9 réponses
PurL
Bonjour,
Je voudrais faire un CoCreateInstanceEx pour instancier un objet COM
d'une machine distante. Comment demander =E0 la machine distante le
CLSID (param=E8tre n=E9cessaire pour CoCreateInstanceEx) de l'objet en
question ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Burel
c'est pas très logique, en générale, on connait le CLSID de l'objet qu'on veut créer. Si on ne le connais pas, alors il y a une API (ou un enumerator) spéciale qui permet d'obtenir ces CLSID. Cette API dépend du type d'objets que vous voulez créer.
VB
"PurL" wrote in message news: Bonjour,
Je voudrais faire un CoCreateInstanceEx pour instancier un objet COM d'une machine distante. Comment demander à la machine distante le CLSID (paramètre nécessaire pour CoCreateInstanceEx) de l'objet en question ?
Merci,
PurL
c'est pas très logique, en générale, on connait le CLSID de l'objet qu'on
veut créer.
Si on ne le connais pas, alors il y a une API (ou un enumerator) spéciale
qui permet d'obtenir ces CLSID. Cette API dépend du type d'objets que vous
voulez créer.
VB
"PurL" <purl@neuf.fr> wrote in message
news:1138868153.338736.197700@f14g2000cwb.googlegroups.com...
Bonjour,
Je voudrais faire un CoCreateInstanceEx pour instancier un objet COM
d'une machine distante. Comment demander à la machine distante le
CLSID (paramètre nécessaire pour CoCreateInstanceEx) de l'objet en
question ?
c'est pas très logique, en générale, on connait le CLSID de l'objet qu'on veut créer. Si on ne le connais pas, alors il y a une API (ou un enumerator) spéciale qui permet d'obtenir ces CLSID. Cette API dépend du type d'objets que vous voulez créer.
VB
"PurL" wrote in message news: Bonjour,
Je voudrais faire un CoCreateInstanceEx pour instancier un objet COM d'une machine distante. Comment demander à la machine distante le CLSID (paramètre nécessaire pour CoCreateInstanceEx) de l'objet en question ?
Merci,
PurL
PurL
En local non plus tu ne connais pas le CLSID de l'objet que tu veux utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID. Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme distant.
Est-ce possible ?
PurL
En local non plus tu ne connais pas le CLSID de l'objet que tu veux
utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID.
Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme
distant.
En local non plus tu ne connais pas le CLSID de l'objet que tu veux utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID. Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme distant.
Est-ce possible ?
PurL
Paul Bacelar
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un composant n'est pas fonction de la machine si le ProgID contient la version du composant.
-- Paul Bacelar
"PurL" wrote in message news:
En local non plus tu ne connais pas le CLSID de l'objet que tu veux utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID. Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme distant.
Est-ce possible ?
PurL
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un
composant n'est pas fonction de la machine si le ProgID contient la version
du composant.
--
Paul Bacelar
"PurL" <purl@neuf.fr> wrote in message
news:1138871487.767445.55530@o13g2000cwo.googlegroups.com...
En local non plus tu ne connais pas le CLSID de l'objet que tu veux
utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID.
Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme
distant.
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un composant n'est pas fonction de la machine si le ProgID contient la version du composant.
-- Paul Bacelar
"PurL" wrote in message news:
En local non plus tu ne connais pas le CLSID de l'objet que tu veux utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID. Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme distant.
Est-ce possible ?
PurL
Paul Bacelar
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un composant n'est pas fonction de la machine si le ProgID contient la version du composant.
-- Paul Bacelar
"PurL" wrote in message news:
En local non plus tu ne connais pas le CLSID de l'objet que tu veux utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID. Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme distant.
Est-ce possible ?
PurL
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un
composant n'est pas fonction de la machine si le ProgID contient la version
du composant.
--
Paul Bacelar
"PurL" <purl@neuf.fr> wrote in message
news:1138871487.767445.55530@o13g2000cwo.googlegroups.com...
En local non plus tu ne connais pas le CLSID de l'objet que tu veux
utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID.
Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme
distant.
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un composant n'est pas fonction de la machine si le ProgID contient la version du composant.
-- Paul Bacelar
"PurL" wrote in message news:
En local non plus tu ne connais pas le CLSID de l'objet que tu veux utiliser. Tu connais son nom et CLSIDFromProgID te donne son CLSID. Oui finalement, je voudrais faire un CLSIDFromProgID sur un systeme distant.
Est-ce possible ?
PurL
PurL
Il est effectivement là le probleme. Le CLSID lié à l'objet est sur la machine distante. Et j'ai remarqué pas mal de setup de ce genre d'objet avoir uniquement une procédure pour installer que les clés du registre necessaire à reconnaitre l'objet sans l'installer. Tout ça pour y avoir accès à distance.
Moi, j'aimerais ne rien installé sur la machine cliente, et avoir une procédure poour demander à une machine distante si elle a un CLSID correspondant à une certaine chaine de caracteres et si oui, me le retourner pour m'en servir apres dans CoCreateInstanceEx.
PurL
Il est effectivement là le probleme.
Le CLSID lié à l'objet est sur la machine distante. Et j'ai remarqué
pas mal de setup de ce genre d'objet avoir uniquement une procédure
pour installer que les clés du registre necessaire à reconnaitre
l'objet sans l'installer. Tout ça pour y avoir accès à distance.
Moi, j'aimerais ne rien installé sur la machine cliente, et avoir une
procédure poour demander à une machine distante si elle a un CLSID
correspondant à une certaine chaine de caracteres et si oui, me le
retourner pour m'en servir apres dans CoCreateInstanceEx.
Il est effectivement là le probleme. Le CLSID lié à l'objet est sur la machine distante. Et j'ai remarqué pas mal de setup de ce genre d'objet avoir uniquement une procédure pour installer que les clés du registre necessaire à reconnaitre l'objet sans l'installer. Tout ça pour y avoir accès à distance.
Moi, j'aimerais ne rien installé sur la machine cliente, et avoir une procédure poour demander à une machine distante si elle a un CLSID correspondant à une certaine chaine de caracteres et si oui, me le retourner pour m'en servir apres dans CoCreateInstanceEx.
PurL
Patrick Philippot
Bonjour,
Moi, j'aimerais ne rien installé sur la machine cliente, et avoir une procédure poour demander à une machine distante si elle a un CLSID correspondant à une certaine chaine de caracteres et si oui, me le retourner pour m'en servir apres dans CoCreateInstanceEx.
Tout cela ressemble très fort à un faux problème :-) .
Si vous n'enregistrez rien sur la machine locale, la correspondance entre le ProgId et le CLSID n'existe pas localement, ok? Si vous ne voulez pas passer à CoCreateInstanceEx le CLSID directement, il faut bien aller le chercher sur le serveur cible, ok? Et où allez vous trouver la correspondance entre votre ProgId et votre CLSID? Dans la registry du serveur. Vous vous connectez sur la registry du serveur et vous cherchez à ouvrir HKCR<votre_progid>, puis vous regardez dans la sous-clé CLSID (valeur par défaut).
La question est maintenant: "Pourquoi voudriez vous vous compliquer la vie à ce point?".
Le couple ProgId/CLSID est intangible. Mise à part la probabilité extrêmement faible de collision sur les ProgIds, un ProgId est toujours associé au même CLSID. Donc si vous connaissez le ProgId au moment de l'écriture du code, vous connaissez aussi le CLSID. Il suffit de regarder la Registry d'une machine où ce composant est installé.
Si par contre votre programme cherche à instancier un objet COM remote par son CLSID à partir d'une information (ProgId) fournie par l'utilisateur, vous devez passer par l'interrogation de la registry du serveur remote. Le mieux dans ce cas est d'alller lire les ProgIds disponibles dans la registry de la machine remote et de présenter la liste à l'utilisateur.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Bonjour,
Moi, j'aimerais ne rien installé sur la machine cliente, et avoir une
procédure poour demander à une machine distante si elle a un CLSID
correspondant à une certaine chaine de caracteres et si oui, me le
retourner pour m'en servir apres dans CoCreateInstanceEx.
Tout cela ressemble très fort à un faux problème :-) .
Si vous n'enregistrez rien sur la machine locale, la correspondance
entre le ProgId et le CLSID n'existe pas localement, ok? Si vous ne
voulez pas passer à CoCreateInstanceEx le CLSID directement, il faut
bien aller le chercher sur le serveur cible, ok? Et où allez vous
trouver la correspondance entre votre ProgId et votre CLSID? Dans la
registry du serveur. Vous vous connectez sur la registry du serveur et
vous cherchez à ouvrir HKCR<votre_progid>, puis vous regardez dans la
sous-clé CLSID (valeur par défaut).
La question est maintenant: "Pourquoi voudriez vous vous compliquer la
vie à ce point?".
Le couple ProgId/CLSID est intangible. Mise à part la probabilité
extrêmement faible de collision sur les ProgIds, un ProgId est toujours
associé au même CLSID. Donc si vous connaissez le ProgId au moment de
l'écriture du code, vous connaissez aussi le CLSID. Il suffit de
regarder la Registry d'une machine où ce composant est installé.
Si par contre votre programme cherche à instancier un objet COM remote
par son CLSID à partir d'une information (ProgId) fournie par
l'utilisateur, vous devez passer par l'interrogation de la registry du
serveur remote. Le mieux dans ce cas est d'alller lire les ProgIds
disponibles dans la registry de la machine remote et de présenter la
liste à l'utilisateur.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Moi, j'aimerais ne rien installé sur la machine cliente, et avoir une procédure poour demander à une machine distante si elle a un CLSID correspondant à une certaine chaine de caracteres et si oui, me le retourner pour m'en servir apres dans CoCreateInstanceEx.
Tout cela ressemble très fort à un faux problème :-) .
Si vous n'enregistrez rien sur la machine locale, la correspondance entre le ProgId et le CLSID n'existe pas localement, ok? Si vous ne voulez pas passer à CoCreateInstanceEx le CLSID directement, il faut bien aller le chercher sur le serveur cible, ok? Et où allez vous trouver la correspondance entre votre ProgId et votre CLSID? Dans la registry du serveur. Vous vous connectez sur la registry du serveur et vous cherchez à ouvrir HKCR<votre_progid>, puis vous regardez dans la sous-clé CLSID (valeur par défaut).
La question est maintenant: "Pourquoi voudriez vous vous compliquer la vie à ce point?".
Le couple ProgId/CLSID est intangible. Mise à part la probabilité extrêmement faible de collision sur les ProgIds, un ProgId est toujours associé au même CLSID. Donc si vous connaissez le ProgId au moment de l'écriture du code, vous connaissez aussi le CLSID. Il suffit de regarder la Registry d'une machine où ce composant est installé.
Si par contre votre programme cherche à instancier un objet COM remote par son CLSID à partir d'une information (ProgId) fournie par l'utilisateur, vous devez passer par l'interrogation de la registry du serveur remote. Le mieux dans ce cas est d'alller lire les ProgIds disponibles dans la registry de la machine remote et de présenter la liste à l'utilisateur.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
PurL
>Si par contre votre programme cherche à instancier un objet COM remote par son CLSID à partir d'une information (ProgId) fournie par l'utilisateur, vous devez passer par l'interrogation de la registry du serveur remote. Le mieux dans ce cas est d'alller lire les ProgIds disponibles dans la registry de la machine remote et de présenter la liste à l'utilisateur.
C'est exactement ce que je veux faire :) Comment explore-t-on la base registre d'une machine distante ?
Merci,
PurL
>Si par contre votre programme cherche à instancier un objet COM remote
par son CLSID à partir d'une information (ProgId) fournie par
l'utilisateur, vous devez passer par l'interrogation de la registry du
serveur remote. Le mieux dans ce cas est d'alller lire les ProgIds
disponibles dans la registry de la machine remote et de présenter la
liste à l'utilisateur.
C'est exactement ce que je veux faire :)
Comment explore-t-on la base registre d'une machine distante ?
>Si par contre votre programme cherche à instancier un objet COM remote par son CLSID à partir d'une information (ProgId) fournie par l'utilisateur, vous devez passer par l'interrogation de la registry du serveur remote. Le mieux dans ce cas est d'alller lire les ProgIds disponibles dans la registry de la machine remote et de présenter la liste à l'utilisateur.
C'est exactement ce que je veux faire :) Comment explore-t-on la base registre d'une machine distante ?
Merci,
PurL
Patrick Philippot
PurL wrote:
C'est exactement ce que je veux faire :) Comment explore-t-on la base registre d'une machine distante ?
Avec les mêmes fonctions qu'en local. Il faut juste appeler RegConnectRegistry avec les permissions adéquates bien sûr. Voir la doc de cette API.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
PurL wrote:
C'est exactement ce que je veux faire :)
Comment explore-t-on la base registre d'une machine distante ?
Avec les mêmes fonctions qu'en local. Il faut juste appeler
RegConnectRegistry avec les permissions adéquates bien sûr. Voir la doc
de cette API.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
C'est exactement ce que je veux faire :) Comment explore-t-on la base registre d'une machine distante ?
Avec les mêmes fonctions qu'en local. Il faut juste appeler RegConnectRegistry avec les permissions adéquates bien sûr. Voir la doc de cette API.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Patrick Philippot
Salut Paul,
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un composant n'est pas fonction de la machine si le ProgID contient la version du composant.
Oui, mais notre ami ne veut pas enregistrer en local. En fait, il veut reproduire le comportement de CreateObject en VB6 qui peut prendre, outre le ProgId, un argument optionnel: le nom du serveur distant. Dans ce cas, aucune inscription locale de l'objet n'est nécessaire. Je n'ai pas de détails sur la manière dont fonctionne CreateObject dans ce cas mais je suppose qu'il va lire la registry distante.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Salut Paul,
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le
CLSID d'un composant n'est pas fonction de la machine si le ProgID
contient la version du composant.
Oui, mais notre ami ne veut pas enregistrer en local. En fait, il veut
reproduire le comportement de CreateObject en VB6 qui peut prendre,
outre le ProgId, un argument optionnel: le nom du serveur distant. Dans
ce cas, aucune inscription locale de l'objet n'est nécessaire. Je n'ai
pas de détails sur la manière dont fonctionne CreateObject dans ce cas
mais je suppose qu'il va lire la registry distante.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Fais le CLSIDFromProgID en local et utilises le CLSID trouvé. Le CLSID d'un composant n'est pas fonction de la machine si le ProgID contient la version du composant.
Oui, mais notre ami ne veut pas enregistrer en local. En fait, il veut reproduire le comportement de CreateObject en VB6 qui peut prendre, outre le ProgId, un argument optionnel: le nom du serveur distant. Dans ce cas, aucune inscription locale de l'objet n'est nécessaire. Je n'ai pas de détails sur la manière dont fonctionne CreateObject dans ce cas mais je suppose qu'il va lire la registry distante.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr