Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

Как персонифицировать описание ошибки вызова метода COM-объекта в скомпилированном приложении?

25.10.2014, 19:23. Показов 2315. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Пример. Вот такой код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_Load()
    On Error GoTo ErrorHandler
    Dim oShell As Object
    Set oShell = CreateObject("WScript.Shell")
    oShell.CurrentDirectory = "***"
    Set oShell = Nothing
    Exit Sub
    
ErrorHandler:
    Debug.Print Now & " - " & "frmMain.Form_Load" & " - #" & Err.Number & " " & Err.Description & ". LastDllError = " & Err.LastDllError
    Resume Next
End Sub
выдаст в IDE ошибку:
"Method 'CurrentDirectory' of object 'IWshShell3' failed."

Если его скомпилировать, получим:
"Method '~' of object '~' failed."

Понимаю, что не находит описания.
Попытался установить в References ссылку на WScript.Shell (Windows Script Host Object (syswow64\wshom.ocx),
переписав все так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Form_Load()
    On Error GoTo ErrorHandler
    
    Dim oShell As New WshShell
    oShell.CurrentDirectory = "***"
    Exit Sub
    
ErrorHandler:
    MsgBox Now & " - " & "frmMain.Form_Load" & " - #" & Err.Number & " " & Err.Description & ". LastDllError = " & Err.LastDllError
    Resume Next
End Sub
Но это не решило проблемы.
Спасибо за помощь.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2014, 19:23
Ответы с готовыми решениями:

Проблема вызова метода COM объекта из VB
Помогите решить проблему. Я написал на С++ COM объект и при попытке вызвать его метод из VB, возникает ошибка. Выдается сообщение о том что...

Передача всего объекта в метод Main для вызова метода
Добрый день! Подскажите пожалуйста. Есть например класс Student. В нём есть свойства IdStudentKurs LastName FirstName IdGroup ...

Присвоение экземпляру объекта значения null вместо вызова метода Dispose()
Я осуществляю загрузку определённого текстового и бинарного контента с удалённых web-ресурсов. Мне нужно предусмотреть вариант, когда...

15
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38157 / 21093 / 4305
Регистрация: 12.02.2012
Сообщений: 34,677
Записей в блоге: 14
25.10.2014, 21:28
Dragokas, видите ли... Судя по ошибке, это следствие неверной установки подсистемы в PE-заголовке. Попробуйте сделать Ваше приложения консольным (т.е. скомпилируйте код, а exe-файл обработайте вот этим кодом):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Main()
    HomeDir$ = App.Path
    Cmd$ = Command$
    If Cmd$ = "" Then
       MsgBox "Íå óêàçàíî èìÿ ìîäóëÿ!", vbCritical
       Exit Sub
    Else
       If InStr(Cmd$, "\") = 0 Then
          fnam$ = HomeDir$ + "\" + Cmd$
       Else
          fnam$ = Cmd$
       End If
       If Dir$(fnam$, vbNormal) = "" Then
          MsgBox "Ìîäóëü " + fnam$ + " íå íàéäåí!", vbCritical
          Exit Sub
       Else
          fi% = FreeFile
          Open fnam$ For Binary Access Read Write As #fi%
          Get fi%, &H3C + 1, L&
          Put fi%, L + &H5C + 1, CLng(3)
          Close fi%
       End If
    End If
End Sub
А потом запустите.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.10.2014, 22:56  [ТС]
Борис, может мы с Вами друг друга неверно поняли.
Мне нужно, чтобы в скомпилированном приложении я видел описания любых ошибок с COM-объектами
точно в таком же виде, как и в режиме IDE.

А еще хотелось бы знать, можно ли как-то еще больше деталей получать об ошибках (программа тестируется на чужих ПК).
Нечто вроде записи дампа, состояние переменных, не перегромождая каждую функцию лишним отладочным кодом.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38157 / 21093 / 4305
Регистрация: 12.02.2012
Сообщений: 34,677
Записей в блоге: 14
26.10.2014, 08:42
Dragokas, понял, буду думать.
0
Модератор
10045 / 3891 / 883
Регистрация: 22.02.2013
Сообщений: 5,840
Записей в блоге: 79
26.10.2014, 11:06
Позже скажу причину.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
27.10.2014, 07:19
Пока можно сделать вот так: Перевод ошибок автоматизации. У кодов ошибок есть диапазоны, которые относятся к разным участкам исполнения. В вашем случае, судя по всему, интерфейс IWshShell3 вызывает WinAPI функцию, которая выкидывает этот код ошибки.

Конкретно этот код означает неправильное имя устройства:
Code
1
Error 0x8007007B The File name, directory name, or volume label syntax is incorrect.
Поскольку COM-функции используют HRESULT в качестве формата сообщения об ошибке, то лучше использовать WinAPI-функцию для диагностики.

Добавлено через 9 часов 42 минуты
Цитата Сообщение от Dragokas Посмотреть сообщение
А еще хотелось бы знать, можно ли как-то еще больше деталей получать об ошибках (программа тестируется на чужих ПК).
Нечто вроде записи дампа, состояние переменных, не перегромождая каждую функцию лишним отладочным кодом.
Всё равно нужно вставлять код для обработки ошибки в каждую функцию,метод. Это не сложно, если задать шаблон в CodeSmart и использовать пункт в контекстном меню для вставки такого обработчика (его можно и убрать тем же способом).

Я у себя в программе писал все сообщения об ошибках в текстовой файл, который назвал Журналом ошибок. В главном меню в разделе Помощь сделал вызов notepad, который показывал этот файл. Так мне отправляли обратную связь в виде этого текстового файла.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.10.2014, 12:00  [ТС]
Цитата Сообщение от уни Посмотреть сообщение
Всё равно нужно вставлять код для обработки ошибки в каждую функцию,метод.
Это не проблема. Главное получить более детализированную информацию.
Сейчас, чтобы узнать в каком месте функции возникает ошибка приходится расставлять по всему коду метки.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
27.10.2014, 13:36
А метки зачем? Можно Err.Raise использовать. Завести набор кодов ошибок своего приложения и обрабатывать исключения в общем обработчике.

Видел я как-то вот такой способ отладки большой портянки:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
        sss = 3
        'проверяем изменился ли номер операции в KT
        'если изменился, добавляем новую операцию,
        'если не изменился, все добавляем в эту же операцию
        If CurCodeOper <> Val(XL_KT.Workbooks(1).WorkSheets(1).Cells(i, 6)) Then
            sss = 4
            CurCodeOper = Val(XL_KT.Workbooks(1).WorkSheets(1).Cells(i, 6))
            'узнаем номер операции
            CurNomerOper = CurNomerOper + 10
            If CurNomerOper >= 100 Then
                CurNomerOperText = CStr(CurNomerOper)
            Else
                CurNomerOperText = "0" & CStr(CurNomerOper)
            End If
            newoper = 1
            sss = 5
        Else
            sss = 6
            newoper = 0
        End If
        sss = 7
        If CurCodeOper > 0 Then
            sss = 8
            XL_TX.Columns("A:A").Select
            XL_TX.Selection.Find(What:=CurCodeOper).Activate
            XL_TX.ActiveCell.Select
            seltxt = "SELECT * from tbltools where groupid = 0"
            Set SprOper = DBPro.OpenRecordset(seltxt, dbOpenDynaset, dbSeeChanges)
            sss = 9
            'проверяем есть ли операция в ИБ, если нет, добавляем, если есть - обновляем ее сведения
            j = XL_TX.ActiveCell.Row
            seltxt = XL_TX.Workbooks(1).WorkSheets(1).Cells(j, 2) & IIf(Len(XL_TX.Workbooks(1).WorkSheets(1).Cells(j, 2)) > 0, " ", "") & XL_TX.Workbooks(1).WorkSheets(1).Cells(j, 3) & XL_TX.Workbooks(1).WorkSheets(1).Cells(j, 4)
            seltxt = Replace(seltxt, "  ", " ")
            sss = 10
            If Len(seltxt) > 0 Then
                sss = 11
                seltxt = "SELECT tblTools.* FROM tblTools INNER JOIN tblGroups ON tblTools.GroupID = tblGroups.GroupID WHERE (tblTools.ToolName = '" & seltxt & "') AND (tblGroups.GroupType = 1)"
                Set VspTable = DBPro.OpenRecordset(seltxt, dbOpenDynaset, dbSeeChanges)
                If VspTable.RecordCount > 0 Then
                    sss = 12
А в конце что-то типа вот такого:
Visual Basic
1
    MsgBox "Загрузка окна. Ошибка N" & Err.Number & " - " & Err.Description & " строка=" & sss
На мой взгляд такое проектирование обработки ошибок неправильное, но оно работает и человек не смог придумать ничего другого. Обработчик клика, в котором этот код находится, занимает 33 экрана по 50 строк (~1500).

У меня в программе каждый обработчик ошибки пишет свой вывод в файл. По нему можно проследить что случилось.

В .Net, кстати, если видели, показывается стек вызовов методов, но не указывается конкретное место в методе где произошёл сбой В парсере, который я недавно показывал, мне нужно было узнать самую первую ошибку, которая вызвала сбой. Для этого я складывал все ошибки в вектор и в вызывающем коде брал самую первую ошибку.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.10.2014, 15:09  [ТС]
Цитата Сообщение от уни Посмотреть сообщение
Видел я как-то вот такой способ отладки большой портянки:
Да. Именно про такие метки я и говорил. По ним видно, в каком кусочке кода была сгенерирована ошибка.
Но я их, естественно, ставлю только, когда узнаю, что где-то в данной функции возникла ошибка.
Снова отдаю программу пользователю, получаю более детальную инфу. Но это, имхо, неверный подход.
А Err.Raise мне зачем, если я заранее не знаю, где может случится ошибка.
Проверки и так стоят, где это возможно, но возникают разные нештатные ситуации при необычных входных данных и прочем.
Примеры приводить не стану.
Цитата Сообщение от уни Посмотреть сообщение
У меня в программе каждый обработчик ошибки пишет свой вывод в файл. По нему можно проследить что случилось.
У меня так же реализовано.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
27.10.2014, 15:38
Err.Raise нужен, если данные на входе метода некорректные. К примеру, у нас метод выполняет операцию деления. Приходит ноль, а на ноль делить нельзя. Мы можем не делать проверку на ноль, а положиться на системный обработчик, либо мы можем явно проверить данные и сформировать исключение, если что не так. Для этого у приложения должны быть свои внутренние коды ошибок. Err.Raise должен будет возвращать их.

Не нужно дожидаться, пока что-то пойдёт не так. Методы классов должны брать на себя работу по проверке входных параметров и генерить исключения. То есть такой стиль должен быть выдержан во всём приложении, методы классов не должны быть большими, лучше пусть будет больше классов и методов, чем длина портянок (тел) методов.

На самом деле не так просто отлаживать большую программу на vb6, если ещё не дай боже используются какие-нить нестандартные сабклассинги с хуками. У меня была проблема, я не мог запустить свою программу в IDE, так как использовались разные навороты. Приходилось вот только листингом ограничиваться и runtime. Хорошо, что в CodeSmart просто обработчики вставлять, вручную замаешься вписывать.

Мне интересно как у других обстоят дела с комплексным подходом по сопровождению и поддержанию целостности программы.

П. С. Кстати, если кому интересно, я изобрёл свой велосипед по автоматическому обновлению программы.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.10.2014, 16:02  [ТС]
Цитата Сообщение от уни Посмотреть сообщение
Err.Raise нужен, если данные на входе метода некорректные.
Это понятно. В контексте этой темы речь идет только об ошибках,
которые заранее не были спрогнозированы разработчиком.
Т.е. не вставишь же проверку там, где уверен, что ошибка не должна произойти ни при каких условиях.
Например, если подать на вход Dir$ путь к точке повторной обработки,
будет сгенерирована #52. Bad procedure call or argument. Я этого раньше не знал и никаких проверок в этой части не делал.
Может, плохо пример, но все же...

Цитата Сообщение от уни Посмотреть сообщение
если ещё не дай боже используются какие-нить нестандартные сабклассинги с хуками.
Иногда временно отключаю сабклассинг.
Часто пользуюсь безопасным сабклассингом от The Trick. Пока что этого хватало.
А вот как сам The Trick отлаживает это интересно, ну кроме как через дебаггер.

Цитата Сообщение от уни Посмотреть сообщение
П. С. Кстати, если кому интересно, я изобрёл свой велосипед по автоматическому обновлению программы.
По этому поводу хотелось бы поговорить в отдельной теме. ... и в целом по работе с версиями.
0
Модератор
10045 / 3891 / 883
Регистрация: 22.02.2013
Сообщений: 5,840
Записей в блоге: 79
27.10.2014, 19:39
Цитата Сообщение от уни Посмотреть сообщение
На самом деле не так просто отлаживать большую программу на vb6, если ещё не дай боже используются какие-нить нестандартные сабклассинги с хуками.
Просто. Покажи мне ситуацию в которой это не просто.
Цитата Сообщение от Dragokas Посмотреть сообщение
Часто пользуюсь безопасным сабклассингом от The Trick. Пока что этого хватало.
А вот как сам The Trick отлаживает это интересно, ну кроме как через дебаггер.
Рад что мой класс приносит пользу.
У меня практически никогда не возникает проблем с отладкой простых вещей как хуки, сабклассинги и т.п. документированные возможности. Если делать все по документации и понимать как это работает (а по другому нельзя применять эти средства), то никаких сложностей в отладке не будет. Самое главное правило: вместо F5 - Ctrl+F5 . Я даже вывел отдельно кнопку на панель. В таких случаях проблем компиляции не будет и хук или сабклассинг не "встанет" в среде.
В твоем случае объект не поддерживает ISupportErrorInfo, поэтому в IDE описание ошибки получается исходя из библиотеки типов. В скомпилированном виде такие действия не выполняются.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
27.10.2014, 20:16
У меня в программе есть несколько сторонних расширений, которые не работают в IDE. На этот случай у меня при запуске в IDE они отключаются автоматически. Но расширения эти напрямую влияют на функционал и без них работать не удобно. К примеру, стандартный msflexgrid не поддерживает работу с функциональными клавишами. Я был в шоке, когда узнал, что стрелки с ним использовать не могу. Пришлось приделывать. Потом ещё какие-то расширения и в сумме они валили мне IDE. Разбираться было долго и я плюнул на это дело, забив на отладку в IDE вообще. Отлаживать в ней можно, просто это становится бессмысленным без расширений.

Раз ты спрашиваешь, то я попробую, как будет время, собрать пример, который у меня валил среду. Может посоветуешь чего.
0
Модератор
10045 / 3891 / 883
Регистрация: 22.02.2013
Сообщений: 5,840
Записей в блоге: 79
27.10.2014, 20:19
уни, правильный сабклассинг никак не может завалить среду. Могу посоветовать мой класс для сабклассинга, но там тоже есть ньюансы с модальными циклами.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.10.2014, 23:51  [ТС]
С учетом кода расшифровки Automation Errors по ссылке уни,
теперь получился у меня такой обработчик:

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Long, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Any) As Long
 
Public Sub Main()
    On Error GoTo ErrorHandler
 
    CreateObject("WScript.Shell").CurrentDirectory = "***"
 
    Exit Sub
ErrorHandler:
    AppendErrorLogFormat Now, Err, "Engine.Main", "Что-то", "еще"
    Resume Next
End Sub
 
Private Function MessageText(lCode As Long) As String
    On Error Resume Next
    Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000
    
    Dim sRtrnCode   As String
    Dim lRet        As Long
 
    sRtrnCode = Space$(256)
    lRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, lCode, ByVal 0&, sRtrnCode, ByVal 256&, ByVal 0&)
    If lRet > 0 Then
        MessageText = Left$(sRtrnCode, lRet)
        MessageText = Replace$(MessageText, vbNewLine, vbNullString)
    End If
End Function
 
Public Sub AppendErrorLogFormat(curTime As Date, ByVal ErrObj As ErrObject, ParamArray CodeModule())
    Dim HRESULT     As String
    Dim Other       As String
    Dim ErrNumber   As Long
    Dim ErrDescr    As String
    Dim ErrLastDll  As Long
    Dim i           As Long
    
    ErrNumber = ErrObj.Number           'сохраняю изначальные свойства
    ErrDescr = ErrObj.Description
    ErrLastDll = ErrObj.LastDllError
    
    On Error Resume Next
    
    For i = 1 To UBound(CodeModule)
        Other = Other & CodeModule(i) & " "
    Next
    HRESULT = MessageText(ErrNumber)
    AppendErrorLog _
        curTime & _
        " - " & CodeModule(0) & _
        " - #" & ErrNumber & " " & _
        IIf(Len(HRESULT), "(" & HRESULT & ")", "") & " " & _
        ErrDescr & _
        ". LastDllError = " & ErrLastDll & _
        IIf(Len(Other), ". " & Other, "")
End Sub


27.10.2014 22:41:58 - Engine.Main - #-2147024773 (Синтаксическая ошибка в имени файла, имени папки или метке тома.) Method 'CurrentDirectory' of object 'IWshShell3' failed. LastDllError = 5. Что-то еще
27.10.2014 22:53:05 - Engine.Main - #-2147024773 (Синтаксическая ошибка в имени файла, имени папки или метке тома.) Method '~' of object '~' failed. LastDllError = 0. Что-то еще
0
Модератор
10045 / 3891 / 883
Регистрация: 22.02.2013
Сообщений: 5,840
Записей в блоге: 79
28.10.2014, 10:47
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Dragokas, почитай на досуге http://www.autopark.ru/ASBProg... _ERROR.HTM
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2014, 10:47
Помогаю со студенческими работами здесь

Описание параметров метода Add объекта Collection
Где есть описание параметров метода Add объекта Collection? Как обратится к елементу колекции через его свойство Key?

В скомпилированном приложении портится интерфейс
Добрый день. Что имеем: моник 24 дюйма, разрешение 3840х2160, увеличение текста 200% Прикладываю скрин как все выглядит. ...

Слетает положение контролов в скомпилированном приложении
Периодически, при запуске отладки и прямо перед запуском откомпилированной программы, все контролы (помимо жестко прибитых доком) совершают...

Канвас, различное расположение кнопок в Unity и в скомпилированном приложении
Канвас прикреплен к камере. В юнити кнопки имеют одно расположение, в скомпилированной игре другое

Не могу использовать теги в скомпилированном приложении под windows
Всем доброго времени суток Сделал проект на Unity в целом простой до безобразия. Сам проект: мячик (сфера) которая катается по полу и при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru