Crazyht - Tutorial services .Net - GetObject ne fonctionne pas

Signaler
Messages postés
10
Date d'inscription
samedi 23 août 2003
Statut
Membre
Dernière intervention
4 août 2005
-
Messages postés
10
Date d'inscription
samedi 23 août 2003
Statut
Membre
Dernière intervention
4 août 2005
-
y a un super tutorial sur les services .net (créé par Crazyht) avec les sources. Merci, Merci à lui....

Toutefois, j'ai un probleme avec interop.... le getobject ne fonctionne pas en service apparement.... Voici une partie des sources de Crazyht... adaptées :


Private Sub InitSurveillance()




'Connect to AutoCAD



Try




Me.CadAppObj = GetObject(,
"AutoCAD.Application.16.1")


AjoutLog(
"Initialisation - AutoCAD allready runing")



Catch exc
As Exception



AjoutLog(
" AutoCAD desable - " & exc.Message)



End
Try



End
Sub


Le getobject provoque systématiquement l'exeption (impossible de créer le composant activeX)

Si quelqun à la sol......

François

4 réponses

Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
8
Le changement du compte d'execution du service (comme conseillé en PV) a-t-il changer quelque chose au probleme ?

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
Messages postés
10
Date d'inscription
samedi 23 août 2003
Statut
Membre
Dernière intervention
4 août 2005

Non, malheuresement....
J'ai changé les propriétés du service dans le gestionnaire de l'ordi, démarré en compte admin de la machine, même résultat ....


Pourtant, le service démarre, AjoutLog fonctionne très bien, seule la méthode getobject provoque directement l'exeption...
Ne faut t'il pas déclarer en plus dans le concepteur de composants une dll de l'interop autocad ou autre ?? Pour le moment, je l'ai déclaré uniquement comme en appli windows normale :


Imports System.ServiceProcess

Imports System.IO

Imports Autodesk.AutoCAD


Public Class Service1

Inherits System.ServiceProcess.ServiceBase


'............ concepteur de composants ......

' etc ........

Private Sub InitSurveillance()

'Connect to AutoCAD
Try
Me.CadAppObj = GetObject(,
"AutoCAD.Application.16.1")
AjoutLog(
"Initialisation - AutoCAD allready runing")

Catch exc
As Exception
AjoutLog(
" AutoCAD desable - " & exc.Message)

End
Try



End
Sub


#
Region
"AutoCAD Interop"
Public
WithEvents CadAppObj
As Autodesk.AutoCAD.Interop.AcadApplication

Private FichierLog
As
String = System.Reflection.Assembly.GetExecutingAssembly.Location.ToString() &
".log"



Private
Sub CadAppObj_NewDrawing()
Handles CadAppObj.NewDrawing
AjoutLog(
"New doc :" & CadAppObj.ActiveDocument.Name)

End
Sub



Private
Sub CadAppObj_BeginCommand(
ByVal commandeCad
As
String)
Handles CadAppObj.BeginCommand
AjoutLog(
"New commande :" & commandeCad)

End
Sub
#
End
Region


François.
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
8
As-tu essaye de faire d'abord une utilisation de ton ActiveX dans une appli genre winform (histoire de pas cumuler les problemes) ?

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
Messages postés
10
Date d'inscription
samedi 23 août 2003
Statut
Membre
Dernière intervention
4 août 2005

Oui, aucun problème..... si l'instance AutoCAD existe , il l'affecte à ma var Me.CadAppObj
, sinon, il me fait la bonne entrée en fichier log, bref, tout est OK.
J'en suis donc à rechercher les problèmes de droits sur les services.

J'ai fais une deuxième source avec le cadaapobj declaré en autodesk.autocad.interop et à ce moment, lors de l'utilisation de la classe, il me créé une nouvelle instance (pas de sub new dans la classe) et cette instance autocad n'est pas visible meme avec cadaapobj .visible=true.

J'ai l'impression de travailler sur deux profils users différents, car meme lorsqu'une instance autocad existe, ma classe en créé une nouvelle, visible uniquement en process.....
J'aimerais utiliser un service servicelocal pour tester....
Suis a strasbourg aujourd'hui aux devdays, vais essayer de déméler ca sur place.

Je te tiens au courant.

F Gansoinat,