aximp (mstscax.dll) - Automatisch generieren beim Buildvorgang

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von BornToBeRoot.

    aximp (mstscax.dll) - Automatisch generieren beim Buildvorgang

    Nabend,

    ich versuche in meinem NETworkManager ein Remote Desktop mit Tabs zu integrieren (vergleichbar mit Remote Desktop Manager). Dazu benötige ich die AxMSTSCLib.dll und MSTSCLib.dll (Quelle: codeproject.com/Articles/43705/Remote-Desktop-using-C-NET)

    Unter WPF werden diese (anscheinend) nicht automatisch generiert, wenn man einen Verweis auf die Microsoft Terminal Srervices Control Type Libary setzt bzw. in der Toolbox über "Choose Item..." die entsprechende COM Komponente auswählt (Microsoft RDP Client Control (redistributable) - version 10)... Wahrscheinlich weil man diese nicht in den Designer ziehen kann und das ActiveX über WindowsFormsHost gehostet werden muss?!

    Derzeit behelfe ich mir damit, die .dlls mit dem Befehl aximp %windir%\system32\mstscax.dll zu generieren und dann von Hand den Verweis hinzuzufügen...

    Hab ich vielleicht etwas übersehen oder gibt es die Möglichkeit das ganze zu automatisieren (z.B. wenn dll-Datei nicht vorhanden, dann erstelle beim Buildvorgang...). Ich kann die Dateien natürlich auf jedem PC auf dem ich entwickele einmal generieren, aber wenn sich jemand den Sourcecode runterlädt und ausführt, würde das Programm direkt abstürzen, auf Grund fehlender dll.

    Ideen?!

    Edit: OK, das mit dem COM-Komponenten (Toolbox) scheint schonmal nicht zu gehen. Google Books (etwas hochscrollen)

    Grüße
    BornToBeRoot
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BornToBeRoot“ ()

    Hallo

    BornToBeRoot schrieb:

    Derzeit behelfe ich mir damit, die .dlls mit dem Befehl aximp %windir%\system32\mstscax.dll zu generieren


    Wenn du sie so generieren kannst, sollte es doch mit dem PreBuildereignis gehen oder?

    Grüße
    Sascha
    Bilder
    • PreBuild.PNG

      22,75 kB, 736×783, 204 mal angesehen
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Sowas hab ich mir schon gedacht. Wenn ich es versuche auszuführen bekomm ich allerdings Fehler 9009 --> Laut Stackoverflow muss man den kompletten Pfad angeben bzw. es dürfen keine Leerzeichen im Pfad sein. Beides trifft ja hier nicht zu.

    Als WorkingDirectory ist $(OutDir) gesetzt, was ja /bin/debug ist... Hab ich auch überprüft mit explorer .

    In der developer console musste ich auch schon mit cd /d D:\...\... den pfad wechseln, ein cd D:\ hat hier nicht gereicht.

    Kann es eventuell sein, dass das Problem auftritt weil die daten auf zwei Platten verteilt liegen?!

    Edit: Also mit dem kompletten Pfad funktioniert es:"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\AxImp.exe" %windir%\system32\mstscax.dll
    Aber sowas ist doch ineffizient, wenn bei jemand anderen eine andere Version installiert ist, muss der Pfad angepasst werden...
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BornToBeRoot“ ()

    So habs nun hinbekommen... allerdings nicht so wie erwartet. Die aximp.exe lässt sich nicht in der "Pre-build event command line" aufrufen (nur mit festem Pfad :/ ).

    Meine Lösung... etwas Magie mit PowerShell ^^

    Hier der Eintrag in der "Pre-build event command line":

    PowerShell.exe -ExecutionPolicy Bypass -NoProfile -File $(ProjectDir)..\..\Scripts\PreBuildEventCommandLine.ps1 $(TargetDir)

    Das Skript liegt außerhalb des VS-Projektordner (aber immer noch im Verzeichnis von Git), dazu einfach $(ProjectDir)..\..\

    Hier das Skript:

    C#-Quellcode

    1. param(
    2. [Parameter(
    3. Position=0,
    4. Mandatory=$true)]
    5. [String]$OutPath
    6. )
    7. # Test if files are already there...
    8. if((Test-Path -Path "$OutPath\MSTSCLib.dll") -and (Test-Path -Path "$OutPath\AxMSTSCLib.dll"))
    9. {
    10. Write-Host "MSTSCLib.dll and AxMSTSCLib.dll already created!"
    11. exit 0
    12. }
    13. # x86 or x64
    14. $ProgramFiles_Path = ${Env:ProgramFiles(x86)}
    15. if([String]::IsNullOrEmpty($ProgramFiles_Path))
    16. {
    17. $ProgramFiles_Path = $Env:ProgramFiles
    18. }
    19. # Get aximp from sdk
    20. $files = (Get-ChildItem -Path "$ProgramFiles_Path\Microsoft SDKs\Windows" -Recurse -Filter "aximp.exe" -File)
    21. if($files.Count -eq 0)
    22. {
    23. Write-Host "Aximp.exe not found on this system!"
    24. exit 2
    25. }
    26. # Change location
    27. Write-Host "Change location to: $OutPath"
    28. Set-Location -Path $OutPath
    29. # Create MSTSCLib.dll and AxMSTSCLib.dll
    30. Write-Host "Creating MSTSCLib.dll and AxMSTSCLib.dll ..."
    31. Start-Process -FilePath $files[$files.Length -1].FullName -ArgumentList "$($Env:windir)\system32\mstscax.dll" -Wait -NoNewWindow


    Somit werden die dlls erstellt (wenn nicht vorhanden) und das Skript kann beliebig erweitert werden.
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!