Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Beste mede-tweakers,

Ik heb een service in C# geschreven, dat via WMI een printer poort aan zou moeten maken. Dit werkt prima, als ik het op een Windows 7 Pro machine laat draaien. Dit werkt ook prima, als ik dit losse stukje code via een console laat draaien. Echter, dit werkt niet, als ik het laat draaien via de service. Ik krijg dan een 'access denied' error terug in de eventlog. Dit overigens op een Windows XP machine.

Wat heb ik al geprobeerd:
- De Windows service onder Administrator account laten draaien (dit moet sowieso straks)
- De Windows service onder eigen account (met admin rechten) laten draaien
- De Windows service onder Local System rechten laten draaien
- WBEM map in %windir%\system32 doorlopen
- Gezocht op eventuele access rights op verschillende sites (waaronder MSDN)

Niets lijkt mij echter de oplossing te kunnen geven. Als het helemaal niet zou werken, dan zou ik nog verder komen, maar het werkt alleen niet als het een service betreft.

Hierbij het kleine stukje code:
C#:
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
public object[] createIPPrinterPort(string portIP)
    {
      object[] returnArray = new object[2];
      try
      {
        ManagementClass portClass = new ManagementClass("Win32_TCPIPPrinterPort");
        ManagementObject portObject = portClass.CreateInstance();

        portObject["Name"] = portIP;
        portObject["HostAddress"] = portIP;
        portObject["PortNumber"] = "9100";
        portObject["Protocol"] = 1;
        portObject["SNMPCommunity"] = "public";
        portObject["SNMPEnabled"] = true;
        portObject["SNMPDevIndex"] = 1;

        PutOptions options = new PutOptions();
        options.Type = PutType.UpdateOrCreate;
        //put a newly created object to WMI objects set             
        portObject.Put(options);
        returnArray[0]= true;
        returnArray[1] = "Poort aangemaakt";
        return returnArray;
      }
      catch (ManagementException me)
      {
        //Console.WriteLine(me.ErrorInformation);
        returnArray[0] = false;
        returnArray[1] = me.ToString();
        return returnArray;
      }
    }


De foutmelding die terugkomt vanuit returnArray[1] is:
code:
1
2
3
4
System.Management.ManagementException: Toegang geweigerd 
   bij System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
   bij System.Management.ManagementObject.Put(PutOptions options)
   bij VNBSelector.Printers.createIPPrinterPort(String portIP) in D:\Development\Visual Studio Projects\VNB\VNSelector\VNSelector\Classes\Printers.cs:regel 58


Nogmaals: als ik het via console en de lokale user met admin rechten draai, werkt het perfect. Het enige verschil is de service.

Wie heeft er de oplossing of kan mij in de juiste hoek laten zoeken qua denkwijze ? Is er iets substansieels anders qua rechten met een service? Zo ja, welke rechten zijn er dan anders en hoe kan ik het oplossen?

Bedankt alvast!

[ Voor 0% gewijzigd door Massiefje op 31-01-2012 20:23 . Reden: Onduidelijkheid opgelost (XP is het probleem) ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 00:55

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

In je topictitel heb je "XP" staan, in je topic heb je 't over win7; ik neem aan dat de bak waar 't mis gaat XP is? Er hangt me iets bij van SP1 ofzo waarin hier een probleem zat (of juist niet, dat 't vanaf SP1 opgelost was) onder XP. Dus misschien even zorgen dat 't systeem helemaal bij is (voor zover mogelijk) qua updates?

[edit]
Grrr; ik heb 't ooit ook gehad, daar ben ik redelijk van overtuigd. Ik kan alleen for the life of me niet meer herinneren wat ik toen heb gedaan om 't op te lossen :( :N

[ Voor 21% gewijzigd door RobIII op 31-01-2012 18:12 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
RobIII schreef op dinsdag 31 januari 2012 @ 18:05:
In je topictitel heb je "XP" staan, in je topic heb je 't over win7; ik neem aan dat de bak waar 't mis gaat XP is? Er hangt me iets bij van SP1 ofzo waarin hier een probleem zat (of juist niet, dat 't vanaf SP1 opgelost was) onder XP. Dus misschien even zorgen dat 't systeem helemaal bij is (voor zover mogelijk) qua updates?

[edit]
Grrr; ik heb 't ooit ook gehad, daar ben ik redelijk van overtuigd. Ik kan alleen for the life of me niet meer herinneren wat ik toen heb gedaan om 't op te lossen :( :N
Ja, correct. Het moet werken op een XP machine en daar heb ik het probleem. Onder Windows 7 draait het als een zonnetje. Excuus voor de eventuele onduidelijkheid.

Daarnaast is het systeem volledig up te date (virtuele machine om te testen).

Acties:
  • 0 Henk 'm!

  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 22:31
Massiefje schreef op dinsdag 31 januari 2012 @ 20:22:
[...]


Ja, correct. Het moet werken op een XP machine en daar heb ik het probleem. Onder Windows 7 draait het als een zonnetje. Excuus voor de eventuele onduidelijkheid.

Daarnaast is het systeem volledig up te date (virtuele machine om te testen).
Ik kijk altijd snel even met iets als process monitor om te kijken welk process waar een access denied krijgt, misschien is dat een optie?

Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Coca-Cola schreef op dinsdag 31 januari 2012 @ 20:40:
[...]


Ik kijk altijd snel even met iets als process monitor om te kijken welk process waar een access denied krijgt, misschien is dat een optie?
Het probleem lijkt hem echt in WMI te zitten. Dit geven de WMI logfiles ook aan. Dat de gebruiker waar de service onder draait geen rechten heeft. Echter, met console application wel....

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 00:55

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Slag in de ruimte: desktop interactive aanzetten op de service? Heeft de gebruiker een profiel (al eens mee ingelogged en dus niet alleen gebruikt als "run as..." user?). Misschien een gare printerdriver die input wil ofzo :? /wildegokmodus

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Nog wat meer getest: nu blijkt dat ook het lezen van de WMI niet goed gaat. Ik dacht alleen het schrijven niet (printer poort bestond nog niet, toch?), maar na verder zoeken blijkt dat de printerpoort uberhaubt niet gevonden wordt. geeft ook geen error terug. Alleen geen resultaten....

Ik gebruik tevens een WMI Query Tool en daarbij werkt het wel prima.

Het begint er meer en meer op te lijken, dat je geen WMI kunt gebruiken met een Windows Service.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 13-05 09:53

Ventieldopje

I'm not your pal, mate!

Massiefje schreef op woensdag 01 februari 2012 @ 01:37:
Nog wat meer getest: nu blijkt dat ook het lezen van de WMI niet goed gaat. Ik dacht alleen het schrijven niet (printer poort bestond nog niet, toch?), maar na verder zoeken blijkt dat de printerpoort uberhaubt niet gevonden wordt. geeft ook geen error terug. Alleen geen resultaten....

Ik gebruik tevens een WMI Query Tool en daarbij werkt het wel prima.

Het begint er meer en meer op te lijken, dat je geen WMI kunt gebruiken met een Windows Service.
Misschien omdat je geen rechten hebt? Je kunt services draaien als andere gebruikers hoor, probeer Administrator eens bijv. (niet aan te raden voor productie omgeving!)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Ventieldopje schreef op woensdag 01 februari 2012 @ 01:44:
[...]


Misschien omdat je geen rechten hebt? Je kunt services draaien als andere gebruikers hoor, probeer Administrator eens bijv. (niet aan te raden voor productie omgeving!)
Uit de openingspost:
quote: Massiefje
Wat heb ik al geprobeerd:
- De Windows service onder Administrator account laten draaien (dit moet sowieso straks)
- De Windows service onder eigen account (met admin rechten) laten draaien
- De Windows service onder Local System rechten laten draaien

Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
RobIII schreef op dinsdag 31 januari 2012 @ 22:58:
Slag in de ruimte: desktop interactive aanzetten op de service? Heeft de gebruiker een profiel (al eens mee ingelogged en dus niet alleen gebruikt als "run as..." user?). Misschien een gare printerdriver die input wil ofzo :? /wildegokmodus
Om ook hier even op te reageren:
- Interact with Desktop kan alleen aan, als hij onder standaard user credentials draait. Niet als ik een eigen user (administrator) hiervoor gebruik.
- Profiel: was een goed idee! Heb net ingelogd onder administrator, maar ook dan werkt het helaas niet
- Ik doe niets met een printerdriver, enkel met een printerpoort en dat staat los van drivers.

Wel bedankt voor je input! Op zich erg goede ideeen!

Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Update: zojuist uitgevonden dat je via WMI ook een 'impersonate option' kan toevoegen.

Dit heeft helaas ook niets geholpen :(

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 00:55

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Impersonaten maakt 't waarschijnlijk alleen maar erger.
http://blogs.msdn.com/b/o.../2011/09/28/10217445.aspx

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Ik heb nog steeds geen oplossing kunnen vinden.

Iemand wellicht anderen ideeen om vanuit een service een printerpoort aan te maken en de printer te connecten met deze printerpoort, zonder WMI te hoeven gebruiken ? Alles en iedereen wijst voor deze functionaliteit naar WMI.

Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Tnx! Ik zal daar eens naar kijken dan!

Acties:
  • 0 Henk 'm!

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 18-04 22:09
Ik heb het probleem uiteindelijk inderdaad opgelost via PRNADMIN.DLL, wat achteraf kinderlijk eenvoudig was. Enkel de voorbereiding was even uitzoeken (eerst een wrapper maken, dan dll registreren, dan toevoegen in project, etc etc).

Maar het werkt in ieder geval!

Iedereen bedankt voor het helpen en voor de aangedragen tips!
Pagina: 1