Форум программистов, компьютерный форум, киберфорум
Наши страницы

PowerShell

Войти
Регистрация
Восстановить пароль
 
Postscripter
5 / 5 / 1
Регистрация: 04.07.2012
Сообщений: 157
#1

SafeWaitHandle - есть такая функция? Как её использовать? - PowerShell

09.06.2017, 09:58. Просмотров 216. Ответов 1
Метки нет (Все метки)

Приветствую!

Я с powershell пока "на вы", но знаю, что у неё много общего с си шарпом. Почти родня.

Вот есть программка на шарпе, "Image Grabber". Если её запускать из командной строки, она крашится, ругаясь на неверный дескриптор. Всё потому, что вызывающая программа, которая тоже на шарпе, предварительно взводит этот дескриптор. Ниже код, как она это делает, 11-я строчка.

Вопрос. Могу ли я взвести его сам, вызывая программу из powershell?

C#
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
ItemInfo itemInfo = (ItemInfo)item.Tag;
string videoPath = itemInfo.Path;
Options options = itemInfo.Options;
int tileCount = Int32.Parse(item.SubItems[0].Text);
AutoResetEvent activityEvent = new AutoResetEvent(false);
AutoResetEvent finishedEvent = new AutoResetEvent(false);
Process workProc = null;
 
options.SaveOptions(Path.Combine(Settings.SettingsDirectory, "OptionsBatch.grb"));
 
activityEvent.SafeWaitHandle = new SafeWaitHandle(NativeMethods.CreateEvent(
    IntPtr.Zero, false, false, "IGBatchActivity"), true);
finishedEvent.SafeWaitHandle = new SafeWaitHandle(NativeMethods.CreateEvent(
    IntPtr.Zero, false, false, "IGBatchFinished"), true);
 
try {
    workProc = Process.Start(Assembly.GetExecutingAssembly().Location,
        String.Format("-batch {0} "{1}"", tileCount, videoPath));
    int lastRespondTime = Environment.TickCount;
    bool finished = false;
 
    do {
        if (activityEvent.WaitOne(100, false)) {
            lastRespondTime = Environment.TickCount;
        }
    }
    while ((Environment.TickCount - lastRespondTime < timeout) &&
        !(finished = finishedEvent.WaitOne(100, false)));
 
    if (!finished) {
        workProc.Kill();
    }
}
catch { }
finally {
    if (workProc != null) {
        try {
            workProc.Dispose();
        }
        catch { }
    }
    activityEvent.Close();
    finishedEvent.Close();
}
 
Application.DoEvents();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2017, 09:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SafeWaitHandle - есть такая функция? Как её использовать? (PowerShell):

Есть такая функция в маткад как maxmod - MathCAD
Есть ли такая функция в маткад как maxmod

Как в строке большую букву найти? Есть ли такая функция или самому писать? - PHP
сабж

есть ли такая функция??? - C++
есть ли функция которая тип String а лучше AnsiString переводит в char???

Есть ли функция такая? - PHP
к-рая каждую первую букву в слове переводила бы в верхний регистр???? Надо получить вот такую фразу: &quot;Mary Had A Little Lamb and She...

Есть ли такая функция? - PHP
Есть два php-файла, в первом надо прочить в стоку html-код, который генерит второй фал. file_get_contents(&quot;page.php&quot;) не предлагать, так...

Подскажите есть ли такая функция - PHP
Нужно преобразовать дату, например, в timeshtamp: дата в формате: Tue, 29 Oct 2013 08:56:22 +0200 есть ли в пхп функции подобного...

1
Postscripter
5 / 5 / 1
Регистрация: 04.07.2012
Сообщений: 157
11.06.2017, 19:37  [ТС] #2
Всем спасибо)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Помещаем в переменную $Code код c#
$Code = @"
 using System;
 using System.Runtime.InteropServices;
 
namespace ImageGrabberII {
  public class Magic {
    [DllImport("kernel32.dll")]
    static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
    public static void DoMagic() { 
      CreateEvent(IntPtr.Zero, false, false, "IGBatchFinished"); 
      CreateEvent(IntPtr.Zero, false, false, "IGBatchActivity");
    }
  }
}
"@
 
# комилируем и выполняем
$cp = new-object Microsoft.CSharp.CSharpCodeProvider        
$cpar = New-Object System.CodeDom.Compiler.CompilerParameters
$cp.CompileAssemblyFromSource($cpar, $code)
[ImageGrabberII.Magic]::DoMagic()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2017, 19:37
Привет! Вот еще темы с ответами:

Есть ли такая встроенная функция - Oracle
Подскажите, пожалуйста, существует ли в Oracle встроенная функция, которая работает так: Принимает два строковых параметра str1, str2....

Есть ли такая функция расщепления? - MS Excel
есть наименование товара ZPAS WZ-2378-01-24-011 Открытая стойка 19&quot;, серия SRK, 24U, высотой 1197 мм, шириной 515 мм и полезной глубиной...

Функция вычисления хэша сообщения, есть ли такая? - JavaScript
Мне надо вычислить хэш сообщения, неважно по какому алгоритму.

Триангуляция матрицы, есть такая функция в MathCAD? - MathCAD
Добрый день) Требуется выполнить триангуляцию матрицы(5*5). Делал вручную, получилось неправильно) Есть ли в MathCADe такая функция?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.