Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 01-10 10:45

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Hey mensen,
Ik heb een stukje code waarmee ik een externe applicatie aanroep.
Dit is een losse exe, dus ik krijg geen events of fout afhandleing.
Om te kijken of er wel of niet wat mis is gegaan, doe ik RedirectStandardOutput, hiermee kan ik zien wat er gebeurd is.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Dim process As New System.Diagnostics.Process
Dim processOutput As String = ""

           process.StartInfo.FileName = "C:\RoboCopy.exe"
           process.StartInfo.RedirectStandardOutput = True

           process.Start()

           'Wait for the process to exit
           While Not process.HasExited
               processOutput += process.StandardOutput.ReadToEnd()
           End While


Deze code werkt prima in windowsXp, maar in windows Server 2008 krijg ik helemaal 0 output.
Ik heb al lopen zoeken op google, maar ik kan geen oplossing vinden. Enkel 1 post met hetzelfde probleem zonder een reactie :P Weet iemand hoe ik dit kan oplossen?

Ik heb ook al geprobeerd om een handle te zetten op de output:
AddHandler process.OutputDataReceived, AddressOf SortOutputHandler
Maar dat heeft ook niet geholpen.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 30-09 16:40

Janoz

Moderator Devschuur®

!litemod

Weet je zeker dat er wat op de stdout terecht komt? Misschien gaat er wat anders fout. Dat valt nu niet te zien omdat de stderr genegeerd wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 01-10 10:45

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Janoz schreef op dinsdag 27 september 2011 @ 10:47:
Weet je zeker dat er wat op de stdout terecht komt? Misschien gaat er wat anders fout. Dat valt nu niet te zien omdat de stderr genegeerd wordt.
Yup, aangezien de output in XP wel goed terecht komt. En heb idd al geprobeerd om de StdError er ook bij te plakken. Maar dat mocht niet baten :P

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Je vangt niet ergens stiekem alle excepties op zonder daar iets mee te doen?

Skill is when luck becomes a habit.


  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 13:47
Ik kom zo snel even dit tegen.
You have to create a manifest for your app or turn off UAC.

What is happening is that since it is not a signed executable the UAC is preventing your service from running/starting other apps. That's where the manifest comes in.... Look it up in the Windows SDK documentation (Applicaiton Manifest).

geheelonthouder met geheugenverlies


  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 01-10 10:45

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Heb even gekeken en wat lopen spelen met het manifest.
In VisualStudio 2008 kan je eenvoudig naar je UAC settings.
Ik heb dat aangepast naar het volgende, maar het werkt nog steeds niet :P

XML:
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="true"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Acties:
  • 0 Henk 'm!

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 13:47
Je required nu administrator, maar betekent dat ook dat je je programma runt als administrator, of moet je die zelf nog runnen als administrator?

Ben zelf niet bekend met de ins en outs van manifests dus ik kan je hierbij niet verder helpen.

geheelonthouder met geheugenverlies


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 01-10 10:45

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Zelfs als ik het programma "Run as Administrator" dan werkt het niet. Ik denk dat we het in een adnere richting moeten zoeken.

Acties:
  • 0 Henk 'm!

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 13:47
Zie je dat die robocopy taak wordt opgestart in de taskmanager?

geheelonthouder met geheugenverlies


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 01-10 10:45

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Ja de applicatie werkt gewoon prima. Mapjes worden ook gekopieerd.
Het is puur de output van de process.StandardOutput die ik niet kan teruglezen.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

To use StandardOutput, you must set ProcessStartInfo.UseShellExecute to false, and you must set ProcessStartInfo.RedirectStandardOutput to true. Otherwise, reading from the StandardOutput stream throws an exception.
Je gebruikt toch geen on error resume next hè? ;)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 01-10 10:45

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
CodeCaster schreef op vrijdag 30 september 2011 @ 10:44:
[...]
Je gebruikt toch geen on error resume next hè? ;)
Bah zeg, ga eens je mond spoelen ;)

Verder zet ik idd de juiste parameters voor de process call
Visual Basic .NET:
1
2
3
4
5
6
process.StartInfo.UseShellExecute = False
process.StartInfo.LoadUserProfile = True
process.StartInfo.Arguments = Argument
process.StartInfo.WorkingDirectory = Workingdir
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardError = True

Acties:
  • 0 Henk 'm!

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 13:47
Even voor de zekerheid, die 2008 is toch geen server core versie he?
Windows Server 2008 (Server Core not supported)
bron

In dat artikel staat wat over mogelijke deadlocks. Kijk anders eens naar zowel je standardoutput als je standarderror async te lezen. Het kan zomaar zijn dat onder 2008 er meer gebufferd wordt dan onder XP en dat er wat buffers vollopen.

[ Voor 32% gewijzigd door TallManNL op 30-09-2011 12:14 ]

geheelonthouder met geheugenverlies


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 01-10 10:45

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Nope, core versie is zonder GUI, en ik maak gebruik van een een server met GUI.

FunFact:
Als ik RedirectStandardOutput op false zet. Dan zie ik een cmdbox verschijnen met robocopy die vrolijk de bestandjes kopieert. Uiteraard is deze cmdbox weg zodra robocopy klaar is.
Als ik RedirectStandardOutput daarna weer op true zet, zie ik wel de cmdbox, maar is deze leeg.

Uiteraard beetje logisch, omdat ik de output naar mezelf toe redirect, maar door het verschil zou je toch verwachten dat er iets meer gaande is :P
Pagina: 1