Это действительно старый вопрос, который я видел много лет назад и сейчас пересматривал. После первого результата поиска Google ... Я отправлю свой ответ здесь.
Все решения, которые я нашел, чрезвычайно сложны и смешны. На протяжении многих лет я натыкался на решение, которое я не видел нигде, и до сих пор не разделял его.
Код очень прост ... По сути, мы пишем командный файл с именем / контуром исполняемого файла процесса, который вы хотите запустить, с любыми аргументами, которые вы хотите. Затем мы запускаем процесс explorer.exe с указанием пути к пакетному файлу ...
File.WriteAllText(@"C:\test.bat", @"C:\test.exe -randomArgs");
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "explorer.exe",
Arguments = @"C:\test.bat",
UseShellExecute = true,
Verb = "runas",
WindowStyle = ProcessWindowStyle.Hidden
}
};
proc.Start();
Процесс проводника, который мы запускаем, немедленно уничтожается операционной системой, однако! Процесс запуска root explorer.exe запускает командный файл! Вы можете дать explorer.exe имя вашего исполняемого файла, и оно будет делать то же самое, однако этот метод не поддерживает аргументы.
Для всех, кого я знаю, это ошибка или недокументированная функция. Однако я не могу себе представить, как это можно использовать злонамеренно, поскольку это позволяет отменять права доступа ... Это работает в Windows 7/8 / 8.1 / 10.
Воспользуйтесь преимуществом закрытия:
createOnClickHandler(event) {
return function onClick() {
console.log(event);
}
}
bind(event,action) {
this.ref.addEventListener(event, createOnClickHandler(event));
}
Следующая демонстрация может связать несколько элементов с любым применимым событием и обратным вызовом.
Модифицированная версия кода, представленная в этой статье
class Binder {
constructor(selector) {
const elements = document.querySelectorAll(selector);
this.length = elements.length;
Object.assign(this, elements);
}
each(callback) {
for (let node of Array.from(this)) {
callback.call(node);
}
return this;
}
bind(event, callback) {
return this.each(function() {
this.addEventListener(event, callback, false);
});
}
};
const eH = selector => new Binder(selector);
const eL = element => new Binder(element);
let count = 0;
const clickCount = e => {
const eTgt = e.currentTarget.children[0];
count++;
eTgt.textContent = count;
};
const colorRed = e => {
e.target.style.color = 'red';
};
eH('.node').bind('click', clickCount);
eL('.tag').bind('click', colorRed);
[111 ] <div class='node'><b>0</b></div>
<div class='tag'>TAG</div>
<div class='tag node'><b>TAG</b></div>