如何在Windows 7注销后在powershell中调用WPF应用程序

时间:2014-05-22 14:44:06

标签: c# wpf windows powershell

我想在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();  

当我尝试将此脚本用作注销脚本时,在Windows设置 - > Scripts - > Logoff下的gpedit.msc中配置,然后我的计算机冻结,这意味着没有反应。

如果我像往常一样执行脚本,那意味着右键单击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

并将其用作注销脚本,它可以正常工作。我的问题是,我只能在.NET中编写PowerShell脚本。

1 个答案:

答案 0 :(得分:0)

从我目前的形式中提出的问题(有点令人困惑,说实话),我认为你想要:

  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 param一起使用将暂停脚本执行,直到进程&#34; PsWpf.exe&#34;结束。此外,您可能不知道但GPO使用CMD shell而不是Powershell执行。因此,要从CMD环境执行powershell命令,您需要将它们封装起来:

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

    如果您的计算机在关机/注销时仍然挂起,因为程序PsWpf.exe未退出。