天天看點

powershell 調用 OpenFileDialog類 假死問題解決。

我建立了一個打開檔案的函數。代碼内容:

1

2

3

4

5

6

7

8

9

<code>function</code> <code>Openfile {  </code>

<code>Add-Type</code> <code>-AssemblyName System.Windows.Forms  </code>

<code>$openfile</code> <code>= </code><code>New-Object</code> <code>System.Windows.Forms.OpenFileDialog  </code>

<code>$openfile</code><code>.</code><code>Filter</code> <code>= </code><code>'圖檔|*.jpg|All Files|*.*'</code>  

<code>$openfile</code><code>.InitialDirectory = </code><code>"C:\ManageOperate\Staff Photo"</code>  

<code>[void]</code><code>$openfile</code><code>.ShowDialog()  </code>

<code>$Openfile</code><code>.title=</code><code>"請選擇一張照片"</code>  

<code>$Openfile</code><code>.FileName  </code>

<code>}</code>

<code>當在Win7SP1X64環境中調用的時候沒有問題。</code>

<a href="http://lixiaosong.blog.51cto.com/attachment/201408/5/705126_1407233375Ilpw.png" target="_blank"></a>

但當把腳本放到Windows Server2008R2環境中卻出現了假死的問題。腳本始終停在這裡沒有視窗彈出。

<a href="http://lixiaosong.blog.51cto.com/attachment/201408/5/705126_1407233375u9U7.png" target="_blank"></a>

原來是由于腳本運作在MTA也就是多線程模式導緻的。Powershell2.0控制台預設是MTA,Powershell3.0 控制台預設是STA。

什麼是MTA和STA:

官方解釋:

判斷Powershell的版本和線程模式 。

Win7SP1 X64

<a href="http://lixiaosong.blog.51cto.com/attachment/201408/5/705126_14072333758BUD.png" target="_blank"></a>

WinServer2008R2

<a href="http://lixiaosong.blog.51cto.com/attachment/201408/5/705126_1407233375xdLA.png" target="_blank"></a>

解決方法:在代碼ShowDialog之前加入*.ShowHelp = $true判斷參數

10

<code>function</code> <code>Openfile {   </code>

<code>Add-Type</code> <code>-AssemblyName System.Windows.Forms    </code>

<code>$openfile</code> <code>= </code><code>New-Object</code> <code>System.Windows.Forms.OpenFileDialog    </code>

<code>$openfile</code><code>.</code><code>Filter</code> <code>= </code><code>'圖檔|*.jpg|All Files|*.*'</code>    

<code>$openfile</code><code>.InitialDirectory = </code><code>"C:\ManageOperate\Staff Photo"</code>    

<code>$openfile</code><code>.ShowHelp=</code><code>$true</code>       

<code>[void]</code><code>$openfile</code><code>.ShowDialog()    </code>

<code>$Openfile</code><code>.title=</code><code>"請選擇一張照片"</code>    

<code>$Openfile</code><code>.FileName    </code>

我們再次在Server上執行這個函數。已經可以彈出視窗了。但視窗有點小呵呵。

<a href="http://lixiaosong.blog.51cto.com/attachment/201408/5/705126_1407233375H4o0.png" target="_blank"></a>

本文轉自handsome7038 51CTO部落格,原文連結:http://blog.51cto.com/lixiaosong/1536071

繼續閱讀