Почему OpenFileDialog найден, если выполняется из ISE, но не из cmd? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть графический интерфейс, я хочу открыть папку и выбрать файл. Когда я выполняю свой код от ISE, это работает. но когда я запускаю из другой среды с cmd, он показывает некоторую ошибку

Exception calling "ShowDialog" with "0" arguument(S): "Creating an instance of the COM component with CLSID.....

 Function Sel_File
 {

 $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
 $OpenFileDialog.InitialDirectory = "P:\Temp\MM"
 $OpenFileDialog.Title = "Please Select File"
 $OpenFileDialog.filter = “All files (*.*)| *.*”
 If ($OpenFileDialog.ShowDialog() -eq "Cancel") 
 {
  [System.Windows.Forms.MessageBox]::Show("No File Selected. Please select a file !", "Error", 0, 
  [System.Windows.Forms.MessageBoxIcon]::Exclamation)
  }   $Global:SelectedFile = $OpenFileDialog.SafeFileName

}
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

$Form                            = New-Object system.Windows.Forms.Form
$Form.AutoSize                   = $true
$Form.text                       = "Auto GM Creation"
$Form.TopMost                    = $true
#----------------------

$ChooseML_L                      = New-Object system.Windows.Forms.Label
$ChooseML_L.text                 = "MLs"
$ChooseML_L.AutoSize             = $true
$ChooseML_L.width                = 25
$ChooseML_L.height               = 10
$ChooseML_L.location             = New-Object System.Drawing.Point(28,20)
$ChooseML_L.ForeColor            = "#000000"

$SelectML                        = New-Object system.Windows.Forms.TextBox
$SelectML.AutoSize               = $true
$SelectML.width                  = 150
$SelectML.height                 = 30
$SelectML.location               = New-Object System.Drawing.Point(120,40)
$SelectML.Text                   = "Selected ML"

$ChooseML                        = New-Object System.Windows.Forms.Button
$ChooseML.text                   = "Select File"
$ChooseML.AutoSize               = $true
$ChooseML.width                  = 90
$ChooseML.height                 = 20
$ChooseML.location               = New-Object System.Drawing.Point(28,38)
$ChooseML.ForeColor              = "#ffffff"
$ChooseML.BackColor              = "#093c76"

$ChooseML.Add_Click({Sel_File
$SelectML.Text = $Global:SelectedFile
}) 

#----------
$Apply                         = New-Object system.Windows.Forms.Button
$Apply.BackColor               = "#6996c8"
$Apply.text                    = "Apply"
$Apply.width                   = 99
$Apply.height                  = 30
$Apply.location                = New-Object System.Drawing.Point(320,190)

#----------
$Cancel                         = New-Object system.Windows.Forms.Button
$Cancel.BackColor               = "#6996c8"
$Cancel.text                    = "Cancel"
$Cancel.width                   = 98
$Cancel.height                  = 30
$Cancel.location                = New-Object System.Drawing.Point(450,190)
$Cancel.Add_Click({$Form.Close()})

#-----------

$Prefix                      = New-Object system.Windows.Forms.Label
$Prefix.text                 = "Prefix"
$Prefix.AutoSize             = $true
$Prefix.width                = 25
$Prefix.height               = 10
$Prefix.location             = New-Object System.Drawing.Point(28,80)
$Prefix.ForeColor            = "#000000"

$NB                              = New-Object system.Windows.Forms.RadioButton
$NB.text                         = "NB"
$NB.AutoSize                     = $true
$NB.BackColor                    = "#4a90e2"
$NB.width                        = 104
$NB.height                       = 20
$NB.location                     = New-Object System.Drawing.Point(28,100)

$DPC                             = New-Object system.Windows.Forms.RadioButton
$DPC.text                        = "DPC"
$DPC.AutoSize                    = $true
$DPC.BackColor                   = "#4a90e2"
$DPC.width                       = 104
$DPC.height                      = 20
$DPC.location                    = New-Object System.Drawing.Point(100,100)

$Form.Controls.AddRange(@($ChooseML, $Prefix, $ChooseML_L, $Apply, $Cancel, $SelectML, $NB, $DPC))
[void]$Form.ShowDialog()

Это мой код обновлен. Это работает с использованием PS ISE, но я попытался выполнить его из среды WinPE, он показывает те ошибки выше. Может ли кто-нибудь помочь мне, пожалуйста. Спасибо

Ответы [ 3 ]

1 голос
/ 14 июня 2019

это работает ... но я думаю, что использование LoadWithPartialName устарело.Я не могу найти «новый путь» в настоящее время, хотя.[ румянец ]

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") |
    Out-Null
$SelectFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$SelectFileDialog.InitialDirectory = 'c:\temp'
$SelectFileDialog.Filter = 'Extensionless files (*)|*'
$SelectFileDialog.Title = 'Please select a file and then click [OK]'
$SelectFileDialog.ShowDialog() |
    Out-Null
$SelectFileDialog.FileName
1 голос
/ 14 июня 2019

Я думаю, что это сработает, если вы удалите | Out-Null из этой строки

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog | Out-Null
0 голосов
/ 14 июня 2019

Просто нужно добавить это, это хорошо работает. Спасибо за весь вклад

 $OpenFileDialog.AutoUpgradeEnabled =$false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...