windows - Multithreaded Powershell GUI Application vises aldrig, når det kaldes fra CMD.exe

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har endelig afsluttet min powerhell wpf-applikation til intern brug hos mit firma, og det løber som forventet, når det kaldes fra et powerhell-vindue, men når jeg forsøger at kalde det fra CMD eller fra Visual Studio som et eksternt værktøj, GUI vinduet aldrig dukker op.


Min ansøgning fungerer meget tæt på denne opskrivning, med nogle få ændringer i displayet og funktioner, der kører i baggrunden. [3]


Kan nogen forklare, hvorfor min ps1-fil ikke viser gui, når jeg kalder det fra CMD, men det gør det, når det kaldes fra kommandovinduet powershell? Her er skriften i scriptet:


$Global:syncHash = [hashtable]::Synchronized(@{})
$newRunspace =[runspacefactory]::CreateRunspace()
$newRunspace.ApartmentState = "STA"
$newRunspace.ThreadOptions = "ReuseThread"
$newRunspace.Open()
$newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash)
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
$psCmd = [PowerShell]::Create().AddScript({
    [xml]$xaml = @"
<valid wpf>
"@
    $reader=(New-Object System.Xml.XmlNodeReader $xaml)

    $syncHash.Window=[Windows.Markup.XamlReader]::Load( $reader )

    [xml]$XAML = $xaml
    $xaml.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | \%{
        #Find all of the form types and add them as members to the synchash
        $syncHash.Add($\_.Name,$syncHash.Window.FindName($\_.Name) )
    }

    ## Custom functions for items in syncHash here ##

    $syncHash.Window.ShowDialog() | Out-Null
    $syncHash.Error = $Error
})
$psCmd.Runspace = $newRunspace
$date = $psCmd.BeginInvoke()


Jeg kalder dette script i cmd.exe 'C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe C: \ pathToFile \ file.ps1'


Min udførelsespolitik er blevet opdateret, så jeg også kan køre scripts.

Bedste reference


Tak for al hjælp, jeg fik det regnet ud. Af en eller anden grund var jeg nødt til at køre kommandoen med NoExit-indstillingen


powershell.exe -ExecutionPolicy Bypass -NoExit -File "pathToFileFile.ps1"