powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запустить exe для которого не указано расширение .exe
24 сообщений из 24, страница 1 из 1
Запустить exe для которого не указано расширение .exe
    #39210593
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. есть primer.exe, я его переименовал в primer_ (вообще без расширения).
И хочу из другого some.exe (который не переименовывал) запустить этот primer_

Понятно, что могу из some.exe программно обратно скопировать/переименовать primer_ -> primer.exe (м.б. временно),
но так делать не хочу.

Process.Start("primer_") и любые производные Shell дадут OpenWith

Есть идеи?

У меня срок сертификата заканчивается, удастся ли приобрести новый не знаю.
сейчас подписываю единственный setup.exe

Хочу положить рядом setup.exe (маленький) + setup_ (большой, реальный)
Подпишу setup.exe (маленький) пока время есть и уже не буду менять, он будет запускаться AsAdmin (доверенный издатель) и запускать setup_
setup_ не должен быть .exe, чтоб юзер на него не жал.

Дайте идеи, любые.
.Net в общем то ни при чем.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210602
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Дайте идеи, любые.
.Net в общем то ни при чем.

1. Попробовать dll - нужно проверить, можно ли подписанному процессу загружать не подписанную библиотеку.
2. Свой загрузчик в подписанном файле
3. Скриптовый транслятор в подписанном файле, скрипт в произвольном файле.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210611
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064,

инсталлятор всегда запускается под админом и именно при этом запуске выводится "доверенный/недоверенный издатель".
если первый (подписанный) exe уже под админом (это я ему обеспечу), и запускает второй exe, то второй exe уже не выведет "доверенный/недоверенный издатель".
Вот вся идея.
Но если положить рядом именно два exe, то юзер может щелкнуть на большой-реальный и будет "недоверенный".
Инсталлятор у меня итак хитрый, двухэтапный с кастомизацией, здесь уже ничего быстро не поменяю.

Идея именно нужна как сказать виндам запустить файл без exe расширения как exe.
Никогда не думал, что это проблема.

Ну, в принципе могу мувнуть скопировать setup_ в %temp%\setup.exe и оттуда запустить. Надо только понять могу ли я его потом удалить из %temp%, потому как это мусор.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210614
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дмитрий77Т.е. есть primer.exe, я его переименовал в primer_ (вообще без расширения).
И хочу из другого some.exe (который не переименовывал) запустить этот primer_
А зачем? Какую задачу должны решить эти телодвижения?
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210616
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Задачу вывода сообщения "Доверенный издатель" при нажатии на setup.exe.
Сейчас она решается подписыванием большого setup.exe подписью Microsoft, которая пока еще неделю валидна.
А через неделю будет невалидна, надо сварганить маленький setup.exe(который уже не буду менять) который будет запускать большой - реальный (который меняется от версии к версии) и успеть подписать.
Я все вроде описал начиная с первого поста.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210618
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

А почему "большой" инсталятор не запихать в dll?
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210623
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Сейчас проверил - через CreateProcess вполне запускается 'xxx.x', проверял на Win2K, правда
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210642
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064Сейчас проверил - через CreateProcess вполне запускается 'xxx.x', проверял на Win2K, правда
А не можешь код дать как проверял?
Я попробовал из VB6 (на .Net чего-то не завелось)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Declare Function CreateProcessA Lib "kernel32" _
 (ByVal lpApplicationName As String, ByVal lpCommandLine As _
 String, ByVal lpProcessAttributes As Long, ByVal _
 lpThreadAttributes As Long, ByVal bInheritHandles As _
 Long, ByVal dwCreationFlags As Long, ByVal _
 lpEnvironment As Long, ByVal _
 lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, _
 lpProcessInformation As PROCESS_INFORMATION) As Long

Private Sub Command1_Click()
  Dim proc As PROCESS_INFORMATION
  Dim start As STARTUPINFO
  CreateProcessA "_Data.my", "", 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc
End Sub


Пишет
ShellExecuteEx failed; code 1155
Указанному файлу не сопоставлено ни одного приложения для выполнения данной операции

Если первый параметр сделать ByVal lpApplicationName As Long
и бухнуть "_Data.my" во второй, то ошибка та же

Ну я на Win8.1 пробую.

Сдается мне, надо _Data.my копировать в %temp% в exe и оттуда запускать, удалить думаю смогу потому как мой setup первого уровня по сути распаковщик в тот же temp.
На .Net накатал по-быстрому, вроде работает идея.
Ток надо думаю сделать на VB6 и через API (на чем умею).
.Net не годится- его наличие на компе на момент начала установки в общем случае не гарантировано.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210668
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Код (на Дельфи, правда):
Код: sql
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.
function RunCmd(Cmd:string;WaitTime:integer):boolean;
var
   s_i:TStartupInfo;
   p_i:TProcessInformation;
   res:integer;
begin
     GetStartupInfo(s_i);
     Result:=true;
     s_i.dwflags:=STARTF_USESHOWWINDOW;
     s_i.WShowWindow:=SW_HIDE;
     if CreateProcess(nil,PChar(Cmd),nil,nil,false,
       CREATE_DEFAULT_ERROR_MODE,nil,nil,s_i,p_i) then
     begin
       WriteLog(8,format('Execute ''%s''.',[Cmd]));
     end
     else
     begin
       WriteLog(1,format('Error %d to execute ''%s''',[GetLastError,Cmd]));
       Result:=false;
     end;
     if WaitTime<>0 then
     if WaitForSingleObject(p_i.hprocess,WaitTime)<>WAIT_OBJECT_0	then
     begin
       GUIMsg(format('Command ''%s'' not terminated in %d ms',[Cmd,WaitTime]));
       Result:=false;
     end;

     CloseHandle(p_i.hprocess);
end;



имя файла я передаю вторым аргументом CreateProcess
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210681
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064через CreateProcess вполне запускается 'xxx.x', проверял на Win2K, правда
+1
CreateProcess() на расширение не смотрит и не только на Win2K
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210683
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Хочу положить рядом setup.exe (маленький) + setup_ (большой, реальный)
Подпишу setup.exe (маленький) пока время есть и уже не буду менять, он будет запускаться AsAdmin (доверенный издатель) и запускать setup_
Обычно в дистрибутивах делают подпапку и туда кладут свой setup.exe. Или можешь переобозвать его как-нибудь, например MyProgInit.exe

Для защиты от прямого запуска юзером: запускай с каким-нибудь параметром, если параметра нет - прямой запуск, завершай работу.

PS Идею с копированием в %temp% и запуском антивирусы могут не одобрить. Убъют весь твой дистрибутив и сигнатуры в свои базы внесут.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210686
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064Код (на Дельфи, правда):
Попробовал точно как у тебя. На Win8.1 ошибка та же что и была.
М.б. на Win2к и где-то еще и работает, но не на новых.
Т.е. не годится.

DimaT,
>Обычно в дистрибутивах делают подпапку и туда кладут свой setup.exe. Или можешь переобозвать его как-нибудь, например MyProgInit.exe
Для защиты от прямого запуска юзером: запускай с каким-нибудь параметром, если параметра нет - прямой запуск, завершай работу.

Да, идея неплоха в общем, особенно с параметром.
Надо будет сделать и такие заготовки, потом разберусь.
Хотя нет, с параметром не получится, у меня во внешней оболочке InnoSetup,
если только кто подскажет как сделать чтоб с параметром запускался.


>PS Идею с копированием в %temp% и запуском антивирусы могут не одобрить. Убъют весь твой дистрибутив и сигнатуры в свои базы внесут.
Так заготовил уже.
Как внесут так и вынесут. Хотя с ними общаться - гимор еще тот. Но я не первый раз %temp% использую.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210764
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Сейчас она решается подписыванием большого setup.exe подписью Microsoft, которая пока еще неделю валидна.
А через неделю будет невалидна, надо сварганить маленький setup.exe(который уже не буду менять) который будет запускать большой - реальный (который меняется от версии к версии) и успеть подписать.

Какие-то непонятные загадочные телодвижения.
Когда файл был подписан, вообще не важно.
Если через неделю срок действия сертификата истекает, то и ЭЦП перестанет быть валидной.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39210903
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211075
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser https://blogs.msdn.microsoft.com/oldnewthing/20140210-00/?p=1823
?
Cпасибо, то что надо, работает с файлом без расширения, и ничего копировать не надо.

А как настоящий setup.exe лучше/красивше обозвать?
_Data
_setup
_install
???
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211435
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Когда файл был подписан, вообще не важно.
Если через неделю срок действия сертификата истекает, то и ЭЦП перестанет быть валидной.
Если файл подписан до истечения срока действия сертификата,
и при этом была сделана отметка времени (timestamp),
то подпись в файле остается валидной и после истечения срока действия сертификата.
Я подписываю маленький setup.exe, и больше его не трогаю (при смене версий).
Пользователь скачав дистр. нажимает именно на него и в UAC -окне всегда будет "Проверенный издатель".
А подписан ли вообще реальный _setup лежащий рядом (содержание которого меняется от версии к версии), вообще не важно - предупреждения уже не будет.

Остается вопрос подписания самих рабочих файлов программы (т.к. некоторые требуют админа с UAC сообщением), но это как раз решается просто путем подписывания своим сертификатом(который сам себе делаешь) и засовыванием последнего в Local в доверенные корневые центры сертификации, с чем инсталлятор (работающий под админом) прекрасно справляется простым .Net-овским кодом в 3 строчки.
Не хорошо конечно, но в общем-то даже честно.
Проблема только в начальном setup.exe, при запуске которого свой сертификат еще не засунут в корневые доверенные.

Ну а что еще придумаешь.
Насколько это приемлимо сразу не узнаешь.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211545
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Если файл подписан до истечения срока действия сертификата,
и при этом была сделана отметка времени (timestamp),
то подпись в файле остается валидной и после истечения срока действия сертификата.
Не уверен, что правильно понял.
Подпись останется валидной.
Но сам сертификат будет невалиден, поскольку срок его действия истек.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211552
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

А что не понятно?
Типа я не понимаю или типа Вам надо разжевать?

Если я сейчас подпишу свой setup.exe - то он будет "подписан валидной подписью" - и она (подпись) будет валидна и через неделю, и через год, и через 10.
А если подпишу через 2 недели (когда сертификат expired) - то подпись валидна уже не будет.

В момент подписывания я через сервер времени (который опять же сертифицирован кем надо MS на сколько надо) ставлю timestamp на свою подпись, например так:
Код: vbnet
1.
signtool sign /a /ph /v /n "My Company Name" /ac crosscert.crt /t http://timestamp.verisign.com/scripts/timstamp.dll setup.exe




Поэтому обмануть (поставить подпись задним числом) не получится даже если откручу часы компьютера на месяц назад.
Ну разве что обмануть свой компьютер, что неинтересно и только пока не открутил обратно.

Если подпись файла без timestamp, то да, ее валидность заканчивается в день кончины сертификата.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211557
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2А зачем? Какую задачу должны решить эти телодвижения?
Разница между верхней картинкой и нижней есть?
Мне и вам м.б. пофиг.
А тому кто первый раз нажал на App не обязательно пофиг.
И поэтому мне уже не пофиг, и по этой причине предпочитаю нижнюю картинку.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211596
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Остается вопрос подписания самих рабочих файлов программы (т.к. некоторые требуют админа с UAC сообщением), но это как раз решается просто путем подписывания своим сертификатом(который сам себе делаешь) и засовыванием последнего в Local в доверенные корневые центры сертификации, с чем инсталлятор (работающий под админом) прекрасно справляется простым .Net-овским кодом в 3 строчки

а сразу озаботиться нормальным сертификатом - никак?

а на картинке зачем замазал название ?
выпустишь свою софтину, подписав чужим именем?
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211646
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

У меня и есть "нормальный" MS Code Signing с нужным "именем компании", но перевыпустить его сейчас как мне надо не получается.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39211916
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, тебе уже привели пример запуска файла без расширения через Windows API, но можно обойтись средствами .NET
Код: vbnet
1.
2.
3.
Dim startInfo As New ProcessStartInfo("setup_")
startInfo.UseShellExecute = False
Process.Start(startInfo)
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39212094
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileДмитрий77, тебе уже привели пример запуска файла без расширения через Windows API,
Да, спасибо. Я воспользовался.
bazileно можно обойтись средствами .NET
Можно, но не стоит.
На момент нажатия на setup.exe наличие .Net нужной версии в общем случае на данном компе не гарантировано.
Посему я сделал на API причем на VB6. Так надежнее. Правильнее б конечно на C, но у меня рука набита на VB6/VB.Net,
а возможности исправить случайную ошибку, когда она вдруг через месяц вскроется, у меня в данном случае нет.
...
Рейтинг: 0 / 0
Запустить exe для которого не указано расширение .exe
    #39217019
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Изопропил,

У меня и есть "нормальный" MS Code Signing с нужным "именем компании", но перевыпустить его сейчас как мне надо не получается.
Перевыпусил таки майкрософтовский.
Уф, непросто это было.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запустить exe для которого не указано расширение .exe
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]