Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes? / 25 сообщений из 29, страница 1 из 2
23.10.2013, 14:46
    #38438398
HellFighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Есть проект где используются Microsoft Visual C++ Runtime Libraryes 2012 года. Каждый раз при установке программы запускать инсталлер Microsoft Visual C++ Runtime Libraryes довольно не приятная процедура, так как большинство пользователей не понимают что это и зачем.
Можно ли программно определить есть ли на компьютере данные библиотеки и если есть, то какой они версии? (Для создания инсталятора использую INNO Setup, если это важно)
...
Рейтинг: 0 / 0
23.10.2013, 15:14
    #38438469
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
HellFighterКаждый раз при установке программы запускать инсталлер Microsoft Visual
C++ Runtime Libraryes довольно не приятная процедура, так как большинство пользователей не
понимают что это и зачем.
А зачем ты заставляешь их запускать его руками? Сам в режиме /SILENT этого сделать не
умеешь?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.10.2013, 16:15
    #38438594
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
HellFighter,

Можно загрузить библиотеку, загрузить из неё ресурс типа VERSION_INFO и оттуда взять версию библиотеки.

Подробности в MSDN.
...
Рейтинг: 0 / 0
23.10.2013, 16:30
    #38438623
HellFighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dimitry Sibiryakov,

Затем, что её установка происходит оооочень долго, а когда программа установки что-то очень долго делает в конце установки некоторые пользователи пугаются и закрывают установку (прога рассчитана в том числе на пользователей не имеющих глубоких познаний в компьютере). Хотя я обдумываю данный вариант в виде решения. А что будет выбрано из Remove / Repair / Cancel при тихой установке?

MasterZiv,

MasterZivHellFighter,

Можно загрузить библиотеку, загрузить из неё ресурс типа VERSION_INFO и оттуда взять версию библиотеки.

Подробности в MSDN.

Если я правильно понимаю, то Вы описали способ получения версии из инсталятора. Если это так, то проблема в получении версии установленного набора библиотек.
Если я ошибся, то можно по подробнее на тему "загрузить библиотеку" для локально установленного дистрибутива?
...
Рейтинг: 0 / 0
23.10.2013, 17:17
    #38438726
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Runtime обычным копированием "устанавливается". Просто положи нужные DLL-ки рядом со своим EXE.
Какие нужны вычисли копированием своей проги на голую винду. Запускай, будет сообщение выскакивать что надо такую-то DLL, и подкладывай пока не заработает. Потом все что доложил копируй к пользователю на комп.

PS Если наворотов при инсталяции не надо, то WinRAR отличный инсталятор. И прав админских не надо для установки.
...
Рейтинг: 0 / 0
23.10.2013, 17:25
    #38438745
HellFighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dima T,

Навороты при инсталяции нужны.
Ну тоже вариант, но очень уш запарный. Думаю хорошей альтернативой копированию файлов по очереди стало бы использование проги Depends, если я правильно понимаю её принцип действия, но я пока с ней не совсем разобрался.
...
Рейтинг: 0 / 0
23.10.2013, 18:35
    #38438856
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
HellFighterЕсли я правильно понимаю, то Вы описали способ получения версии из инсталятора.
Если я ошибся, то можно по подробнее на тему "загрузить библиотеку" для локально установленного дистрибутива?

Без инсталятора. Без каких-либо дистрибутивов.

LoadLibrary
LoadResource

http://msdn.microsoft.com/en-us/library/windows/desktop/ms648008(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa381058(v=vs.85).aspx
...
Рейтинг: 0 / 0
23.10.2013, 18:37
    #38438860
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dima TRuntime обычным копированием "устанавливается". Просто положи нужные DLL-ки рядом со своим EXE.
Какие нужны вычисли копированием своей проги на голую винду. Запускай, будет сообщение выскакивать что надо такую-то DLL, и подкладывай пока не заработает. Потом все что доложил копируй к пользователю на комп.


Это всё здорово, но только в конце концов кончается обычно плохо.
В системе обычно есть CRT и хорошо, если оно нужной версии.
А вот если другой, да потом запускают программу не из того каталога, тут и начинается...
...
Рейтинг: 0 / 0
23.10.2013, 19:02
    #38438906
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
MasterZivА вот если другой, да потом запускают программу не из того каталога, тут и
начинается...
Оно обычно начинается даже если запускают программу из того каталога, поскольку С++
рантайм требует манифестов и прочей дребедени.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.10.2013, 19:15
    #38438926
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
MasterZivА вот если другой, да потом запускают программу не из того каталога, тут и начинается...
Если верить Рихтеру то сначала DLL ищется там где живет EXE.

Если судить по близкому мне фоксу, то так оно и есть. Там с рантаймом все гораздо хуже, если в систему залит от версии *.0 то бывают нездоровые глюки на ровном месте. Поэтому кладу рантайм только в папку с EXE, проблем нет, мой EXE всегда исполняется нужным мне рантаймом.
...
Рейтинг: 0 / 0
23.10.2013, 19:25
    #38438934
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
MasterZivБез инсталятора. Без каких-либо дистрибутивов.

LoadLibrary
LoadResource
Если нет вообще рантайма нужного? Как скомпилировать EXE который сделает LoadLibrary() ? При старте EXE рантайм будет искать, если не найдет - не запустится.
...
Рейтинг: 0 / 0
23.10.2013, 19:30
    #38438936
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dimitry SibiryakovMasterZivА вот если другой, да потом запускают программу не из того каталога, тут и
начинается...
Оно обычно начинается даже если запускают программу из того каталога, поскольку С++
рантайм требует манифестов и прочей дребедени.


Не всегда. Только в определённый период развития оного.
...
Рейтинг: 0 / 0
23.10.2013, 19:30
    #38438938
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dima TMasterZivБез инсталятора. Без каких-либо дистрибутивов.

LoadLibrary
LoadResource
Если нет вообще рантайма нужного? Как скомпилировать EXE который сделает LoadLibrary() ? При старте EXE рантайм будет искать, если не найдет - не запустится.

А зачем тебе CRT для этого ?
Пиши без CRT.
...
Рейтинг: 0 / 0
23.10.2013, 19:32
    #38438942
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
MasterZivТолько в определённый период развития оного.
Ну да, у 2012-й студии может это и пофиксили (по крайней мере обещали), а вот сборки на
2005-2008 простым подкладыванием DLL-ек было не запустить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.10.2013, 19:53
    #38438958
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
MasterZivDima Tпропущено...

Если нет вообще рантайма нужного? Как скомпилировать EXE который сделает LoadLibrary() ? При старте EXE рантайм будет искать, если не найдет - не запустится.

А зачем тебе CRT для этого ?
Пиши без CRT.
Научи как. Я пытался обойтись без него, не пользовал никаких Сишных функций, т.к. мне только printf() нужен и то без него проживу, но компилятор все равно рантайм включает в загрузку DLL. Сморишь Far`ом - рантайм загружен в твоем процессе.

Вот откомпилировал в 2012 студии такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include "stdafx.h"
#include <windows.h>

int main(int argc, char* argv[])
{
	Sleep(100000);
	return 0;
}


Забросил на комп без рантайма - не запускается. Требует msvcr110.dll

far показываетModules:
Base Size Path (version info is not displayed)
01170000 6000 T:\VC\TestVC\Release\TestVC.exe
77480000 180000 C:\Windows\SysWOW64\ntdll.dll
769C0000 110000 C:\Windows\syswow64\kernel32.dll
76590000 47000 C:\Windows\syswow64\KERNELBASE.dll
74420000 D2000 C:\Windows\system32\MSVCR110.dll


Насколько я понимаю, эта строчка
Код: plaintext
1.
int main(int argc, char* argv[])


требует наличия рантайма.
...
Рейтинг: 0 / 0
23.10.2013, 20:00
    #38438964
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dima T,

ОК, если тебе так нужен рантайм (хотя здесь вроде бы причин для того нет), собирай со СТАТИЧЕСКИМ рантаймом (.lib).

Собирай в RELEASE режиме.
Собирай без доп. проверок в рантайме, я не знаю точно, но думаю, их можно отключить.
Т.е. вариантов много.

Также реализация своего sprintf есть в Win32.
...
Рейтинг: 0 / 0
23.10.2013, 20:11
    #38438975
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dima TC:\Windows\system32\MSVCR110.dll
Мнда... Это, вообще-то С рантайм, а в сабже - С++ рантайм. Это как бэ две большие разницы...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.10.2013, 20:21
    #38438988
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
MasterZivDima T,

ОК, если тебе так нужен рантайм (хотя здесь вроде бы причин для того нет)
Мне он не нужен, но избавится от него я не могу. Может не умею. Я не профи вот и прошу подсказать как без него сделать EXE. В свое время я мозг сломал чтоб эту проблему решить, но она не решаема как мне кажется.

MasterZiv собирай со СТАТИЧЕСКИМ рантаймом (.lib).
Подскажи где настроить или ссылку дай где почитать как это сделать.

MasterZivСобирай в RELEASE режиме.
Собирай без доп. проверок в рантайме, я не знаю точно, но думаю, их можно отключить.
Т.е. вариантов много.
Дай хоть один пример проекта EXE (не требующего рантайм) выполняющего одну строку
Код: plaintext
1.
Sleep(100000);


Дальше я сам разберусь.

PS Я не глумлюсь и не троллю. Мне это реально надо. как уже писал VC мне надо только для оберток над WinAPI из-за ограничений фокса. У меня несколько тысяч пользователей, автообновление проги, и если после него даже всего у сотни выскочит что не найдена какая-то DLL то это будет большая .опа.
...
Рейтинг: 0 / 0
23.10.2013, 20:29
    #38438996
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dima TЯ не глумлюсь и не троллю.
Тупишь: http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=vs.100).aspx
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.10.2013, 20:58
    #38439018
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dimitry SibiryakovDima TЯ не глумлюсь и не троллю.
Тупишь: http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=vs.100).aspx

Туплю. На VC6 сижу до сих пор.
Спасибо. /MT помогло с EXE из Sleep(). Работает без доп. DLL (MSVCR110.dll). Буду с DLL-проектами пробовать.

Потестил: в VC6 (проект Win32 console) релиз никаких рантаймов не грузит для такой проги, даже без /MT
...
Рейтинг: 0 / 0
23.10.2013, 21:03
    #38439022
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dima TНа VC6 сижу до сих пор.
Тогда что у тебя там делает рантайм от VC2012? У VC6 эта DLL называется msvcr60.dll.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.10.2013, 21:12
    #38439030
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Dimitry SibiryakovDima TНа VC6 сижу до сих пор.
Тогда что у тебя там делает рантайм от VC2012? У VC6 эта DLL называется msvcr60.dll.

2012 тоже есть. Поставил пока для тестов.
Работающий софт на VC6 собран.
...
Рейтинг: 0 / 0
23.10.2013, 21:23
    #38439036
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
Хочу сказать Спасибо всем критиковавшим на мои домыслы. В очередной раз понял что самопридуманные выводы надо иногда пересматривать, а не воспринимать как аксиомы.
...
Рейтинг: 0 / 0
24.10.2013, 12:32
    #38439656
HellFighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
MasterZivHellFighterЕсли я правильно понимаю, то Вы описали способ получения версии из инсталятора.
Если я ошибся, то можно по подробнее на тему "загрузить библиотеку" для локально установленного дистрибутива?

Без инсталятора. Без каких-либо дистрибутивов.

LoadLibrary
LoadResource

http://msdn.microsoft.com/en-us/library/windows/desktop/ms648008(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa381058(v=vs.85).aspx

Ну да, я так понимаю это всё не сложно сделать, если точно знаешь что использует твоя прога.
В принципе, если знать что используется, то я думаю есть достаточно много вариантов проверки наличия и версии. Тогда я не верно зада вопрос.

Как узнать что использует твоё приложение? Копированием недостающих библиотек по очереди это как-то не айс. Знаю прогу Depends, но как-то пытался скопировать всё необходимое используя её - ничего не получилось. Какие ещё есть способы определения используемых приложением DLL? (Видел тут про Far писали, но в нём такого не наблюдал ни разу)

ЗЫ: Это всё нужно для DLL COM-сервера, отвечающего за расширение контекстного меню в Shell. Бог его знает что он там вообще подгружает...
...
Рейтинг: 0 / 0
24.10.2013, 12:41
    #38439684
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes?
HellFighter Бог его знает что он там вообще подгружает...
это только от тебя зависит
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать установлены ли Microsoft Visual C++ Runtime Libraryes? / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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