qmya00 发表于 2018-9-2 13:47:59

powershell 调用 OpenFileDialog类 假死问题解决。

  我创建了一个打开文件的函数。代码内容:
function Openfile {  
Add-Type -AssemblyName System.Windows.Forms
  
$openfile = New-Object System.Windows.Forms.OpenFileDialog
  
$openfile.Filter = '图片|*.jpg|All Files|*.*'
  
$openfile.InitialDirectory = "C:\ManageOperate\Staff Photo"
  
$openfile.ShowDialog()
  
$Openfile.title="请选择一张照片"
  
$Openfile.FileName
  
}
当在Win7SP1X64环境中调用的时候没有问题。
  但当把脚本放到Windows Server2008R2环境中却出现了假死的问题。脚本始终停在这里没有窗口弹出。

  原来是由于脚本运行在MTA也就是多线程模式导致的。Powershell2.0控制台默认是MTA,Powershell3.0 控制台默认是STA。
  什么是MTA和STA:
  官方解释:
  STA:http://msdn.microsoft.com/en-us/library/ms680112(v=vs.85).aspx
  MTA:http://msdn.microsoft.com/en-us/library/ms693421(v=vs.85).aspx
  判断Powershell的版本和线程模式 。
  Win7SP1 X64

  WinServer2008R2

  解决方法:在代码ShowDialog之前加入*.ShowHelp = $true判断参数
function Openfile {  
Add-Type -AssemblyName System.Windows.Forms
  
$openfile = New-Object System.Windows.Forms.OpenFileDialog
  
$openfile.Filter = '图片|*.jpg|All Files|*.*'
  
$openfile.InitialDirectory = "C:\ManageOperate\Staff Photo"
  
$openfile.ShowHelp=$true
  
$openfile.ShowDialog()
  
$Openfile.title="请选择一张照片"
  
$Openfile.FileName
  
}
  我们再次在Server上执行这个函数。已经可以弹出窗口了。但窗口有点小呵呵。



页: [1]
查看完整版本: powershell 调用 OpenFileDialog类 假死问题解决。