Рост памяти и дескрипторов при ShellExecute()
От: sandrey_  
Дата: 14.07.05 12:24
Оценка:
Использую в своей программе несколько вызовов ShellExecute().
Почему-то когда происходит выхов этой функции используемая приложением память подскакивает на 2-3 МБ (!), а количество используемых дескрипторов на 60-70 (!). И если память потом высвобождается (через некоторое, почему-то длительное, время), то дескрипторы остаются вплоть до закрытия приложения.

Почему так происходит?

Возможно ли использовать CreateProcess (т.е. некоторые exe c какими-то параметрами) вместо ShellExecute
— для запуска команды типа "mailto:";
— для запуска ярлыка (например к консольной программе — там в ярлыке настраивается размер окна, цвета и шрифт)
Re: Рост памяти и дескрипторов при ShellExecute()
От: gorokhov.alexander  
Дата: 14.07.05 12:59
Оценка:
Здравствуйте, sandrey_, Вы писали:

_>Использую в своей программе несколько вызовов ShellExecute().

_>Почему-то когда происходит выхов этой функции используемая приложением память подскакивает на 2-3 МБ (!), а количество используемых дескрипторов на 60-70 (!). И если память потом высвобождается (через некоторое, почему-то длительное, время), то дескрипторы остаются вплоть до закрытия приложения.

_>Почему так происходит?


незнаю 8)

_>Возможно ли использовать CreateProcess (т.е. некоторые exe c какими-то параметрами) вместо ShellExecute


Пример:
в реестре HKEY_CLASSES_ROOT\.rar — Default Value — WinRAR
HKEY_CLASSES_ROOT\WinRAR\Shell\Open\Command — отсюда берём командную строку для запуска

Момент: насколько я помню строка с параметрами в CreateProcess должна начинаться с пробела, иначе возвратит файл не найден

_>- для запуска команды типа "mailto:";


Через MAPI

_>- для запуска ярлыка (например к консольной программе — там в ярлыке настраивается размер окна, цвета и шрифт)


АПИ для этого точно есть... не помню...
Re: Рост памяти и дескрипторов при ShellExecute()
От: SpLove Россия  
Дата: 17.07.05 06:04
Оценка:
Здравствуйте, sandrey_, Вы писали:

_>Использую в своей программе несколько вызовов ShellExecute().

_>Почему-то когда происходит выхов этой функции используемая приложением память подскакивает на 2-3 МБ (!), а количество используемых дескрипторов на 60-70 (!). И если память потом высвобождается (через некоторое, почему-то длительное, время), то дескрипторы остаются вплоть до закрытия приложения.
Насчет дескрипторов. Даже если ты явным избавяешься от системных объектов, на которые дескрипторы и описывают, не факт что число их уменьшиться. Это происодит потому что эти объекты может использовать кто-то ешё. Подробности у Рихтера
_>Возможно ли использовать CreateProcess (т.е. некоторые exe c какими-то параметрами) вместо ShellExecute
_>- для запуска команды типа "mailto:";
_>- для запуска ярлыка (например к консольной программе — там в ярлыке настраивается размер окна, цвета и шрифт)
Из MSDN CreateProcess(NULL, "\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
Может можно решить ваши проблемы с помощью параметров командной строки? Например, вызвать так почтовую программу так точно можно, правда по памяти не напишу
<< RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: Рост памяти и дескрипторов при ShellExecute()
От: sandrey_  
Дата: 17.07.05 10:38
Оценка:
Здравствуйте, SpLove, Вы писали:

_>>- для запуска ярлыка (например к консольной программе — там в ярлыке настраивается размер окна, цвета и шрифт)

SL> Из MSDN CreateProcess(NULL, "\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
SL> Может можно решить ваши проблемы с помощью параметров командной строки?

Ну вот я и спрашиваю как вместо запуска ярлыка использовать командную строку? Есть консольное приложение. В свойствах ярлыка я настраиваю цвет фона, цвет текста, размер окна, размер буфера вывода и т.п. Как я все это укажу в командрой строке? и в командной строке какой программы?
Re[3]: Рост памяти и дескрипторов при ShellExecute()
От: SpLove Россия  
Дата: 19.07.05 05:49
Оценка:
Здравствуйте, sandrey_, Вы писали:

_>Ну вот я и спрашиваю как вместо запуска ярлыка использовать командную строку? Есть консольное приложение. В свойствах ярлыка я настраиваю цвет фона, цвет текста, размер окна, размер буфера вывода и т.п. Как я все это укажу в командрой строке? и в командной строке какой программы?


Стоп стоп стоп Как я вас понял вы хотите вместо ярлыка использовать командную строку? Но ведь если вызвать свойства любого ярлыка в поле объект и будет написана та самая командная строка. А параметры разбирать нужно как это делает функция main, т.е. int argc и char* argv[]. Или я что не так понял
<< RSDN@Home 1.1.4 stable rev. 510>>
Re[4]: Рост памяти и дескрипторов при ShellExecute()
От: sandrey_  
Дата: 19.07.05 06:06
Оценка:
Здравствуйте, SpLove, Вы писали:

SL> Стоп стоп стоп Как я вас понял вы хотите вместо ярлыка использовать командную строку? Но ведь если вызвать свойства любого ярлыка в поле объект и будет написана та самая командная строка. А параметры разбирать нужно как это делает функция main, т.е. int argc и char* argv[]. Или я что не так понял


В программе на WinAPI c помощью CreateProcess запустите программу с именем "cmd.exe" так, что бы цвет фона у нее был синий, а цвет букв желтый, размер окна был бы 100x40, а разбер буфера экрана 100x400. Сможете?
А вот если создать ярлык к cmd.exe, то в его свойствах можно все это настроить. Но тогда запуск нужно делать с помощью ShellExecute, т.к. CreateProcess запускает только exe и com файлы.

Мне хотелось бы иметь механизм, позволяющий запускать ЛЮБОЙ ярлык (а не для одной конкретной программы, с заранее заданными параметрами) не используя ShellExecute.
Re[5]: Рост памяти и дескрипторов при ShellExecute()
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 19.07.05 08:04
Оценка:
Здравствуйте, sandrey_, Вы писали:

_>В программе на WinAPI c помощью CreateProcess запустите программу с именем "cmd.exe" так, что бы цвет фона у нее был синий, а цвет букв желтый, размер окна был бы 100x40, а разбер буфера экрана 100x400. Сможете?


запусти cmd.exe, в свойствах окна настрой цвета и шрифты, скажи ЭSave properties for future windows with same title", посмотри, что записалось в HKEY_CURRENT_USER\Console\твоё_окно\. Теперь если ты перед запуском своей консоли создашь этот ключ с нужными параметрами — получишь окно нужного размера и цвета.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.