如何在windows 7下线后在powershell中调用WPF应用程序

本文关键字:调用 WPF powershell 应用程序 windows 7下 | 更新日期: 2023-09-27 18:04:42

我想在windows 7退出后调用我的wpf应用程序。我写了一个powershell脚本,调用我的wpf应用程序,等待wpf应用程序接近。代码

$p = New-Object System.Diagnostics.Process
$pinfo = New-Object System.Diagnostics.ProcessStartInfo("D:'PowerShell'PsWpf.exe");
$p.StartInfo = $pinfo;
$p.Start();
$p.WaitForExit();  

当我尝试使用这个脚本作为注销脚本时,在gpedit中配置。msc下的Windows设置->脚本->注销,然后我的电脑冻结,这意味着没有反应。

如果我像往常一样执行脚本,这意味着右键单击powershell文件,然后"运行然后与powershell",一切运行正常。

windows下线后如何在powershell中调用我的wpf应用程序?

我知道可以在powershell中使用wpf,比如

Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName PresentationCore
Add-Type -AssemblyName WindowsBase
[xml]$xaml = 
@"
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="PowerShell WPF" Height="244" Width="525" FontFamily="Calibri" FontWeight="Bold" ResizeMode="NoResize">
    <Grid Background="#58000000">
        <Label Content="Designed and Developed by Free Lancer" Height="28" HorizontalAlignment="Left" Margin="288,165,0,0" Name="label1" VerticalAlignment="Top" />
    </Grid>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load( $reader )

$Window.ShowDialog() | Out-Null

并使用它作为注销脚本,它工作得很好。我的问题是,我不能在powershell脚本只有在。net。

如何在windows 7下线后在powershell中调用WPF应用程序

从你的问题目前的形式来看(老实说有点令人困惑),我认为你想:

  1. 在下线事件时启动进程
  2. 使用组策略
  3. 执行此操作
  4. 暂停下线,直到脚本动作和流程完成

我不明白你为什么用:

$p = New-Object System.Diagnostics.Process
$pinfo = New-Object System.Diagnostics.ProcessStartInfo("D:'PowerShell'PsWpf.exe");
$p.StartInfo = $pinfo;
$p.Start();
$p.WaitForExit();  

我想知道这样是否更好:

Start-Process -FilePath "D:'Powershell'PsWpf.exe" -Wait

使用Start-Process-Wait参数将暂停脚本执行,直到进程"PsWpf.exe"结束。此外,您可能没有意识到GPO与CMD shell而不是Powershell一起执行。因此,要在CMD环境中执行powershell命令,您需要像这样封装它们:

powershell.exe -Command "& {Start-Process -FilePath "D:'Powershell'PsWpf.exe" -Wait}

如果您的计算机在关机/下线时仍然挂起,这是因为程序PsWpf.exe没有退出。