我想在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脚本。
答案 0 :(得分:0)
从我目前的形式中提出的问题(有点令人困惑,说实话),我认为你想要:
我为什么要一直在使用:
$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
未退出。