Вы не можете делать какие-либо предположения о порядке возвращаемых значений Type.GetProperties
, см. документацию :
Метод GetProperties не возвращает свойства в конкретный порядок, например, алфавитный или порядок декларации. Ваш код не должен зависеть от порядка, в котором возвращаются свойства, потому что этот порядок меняется.
blockquote>Если вам нужен конкретный заказ, вы должны сделать свой код заказам возвращенной коллекции.
Наиболее вероятная причина наблюдаемого вами поведения заключается в том, что команды openssl
, которые вы запускаете непосредственно перед попыткой открыть этот файл (в частности, команда шифрования, которая, похоже, создает файл), еще не завершены. Вы не говорите методу Run
ждать возвращения команд, поэтому они работают асинхронно в фоновом режиме. Предположительно, WScript.Echo
добавляет достаточную задержку для завершения шифрования, прежде чем код переходит к открытию файла. Использование WScript.Sleep
вместо того, чтобы что-то повторять, вероятно, имело бы такой же эффект.
Чтобы устранить проблему, дождитесь возвращения внешних команд.
Замените эти строки:
encryptOpts = encryptorPath & ...
oShell.Run (encryptOpts)
decryptOpts = encryptorPath & ...
oShell.Run (decryptOpts)
на это:
encryptOpts = encryptorPath & ...
oShell.Run encryptOpts, 0, True
decryptOpts = encryptorPath & ...
oShell.Run decryptOpts, 0, True
Также рекомендуется проверить состояние выхода внешних команд, чтобы вы могли увидеть, если что-то пошло не так:
rc = oShell.Run(encryptOpts, 0, True)
If rc <> 0 Then
'an error occurred
End If