Использую в своей программе несколько вызовов ShellExecute().
Почему-то когда происходит выхов этой функции используемая приложением память подскакивает на 2-3 МБ (!), а количество используемых дескрипторов на 60-70 (!). И если память потом высвобождается (через некоторое, почему-то длительное, время), то дескрипторы остаются вплоть до закрытия приложения.
Почему так происходит?
Возможно ли использовать CreateProcess (т.е. некоторые exe c какими-то параметрами) вместо ShellExecute
— для запуска команды типа "mailto:";
— для запуска ярлыка (например к консольной программе — там в ярлыке настраивается размер окна, цвета и шрифт)
Здравствуйте, 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
_>- для запуска ярлыка (например к консольной программе — там в ярлыке настраивается размер окна, цвета и шрифт)
Здравствуйте, 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()
Здравствуйте, SpLove, Вы писали:
_>>- для запуска ярлыка (например к консольной программе — там в ярлыке настраивается размер окна, цвета и шрифт) SL> Из MSDN CreateProcess(NULL, "\"C:\\Program Files\\MyApp.exe\" -L -S", ...) SL> Может можно решить ваши проблемы с помощью параметров командной строки?
Ну вот я и спрашиваю как вместо запуска ярлыка использовать командную строку? Есть консольное приложение. В свойствах ярлыка я настраиваю цвет фона, цвет текста, размер окна, размер буфера вывода и т.п. Как я все это укажу в командрой строке? и в командной строке какой программы?
Re[3]: Рост памяти и дескрипторов при ShellExecute()
Здравствуйте, sandrey_, Вы писали:
_>Ну вот я и спрашиваю как вместо запуска ярлыка использовать командную строку? Есть консольное приложение. В свойствах ярлыка я настраиваю цвет фона, цвет текста, размер окна, размер буфера вывода и т.п. Как я все это укажу в командрой строке? и в командной строке какой программы?
Стоп стоп стоп Как я вас понял вы хотите вместо ярлыка использовать командную строку? Но ведь если вызвать свойства любого ярлыка в поле объект и будет написана та самая командная строка. А параметры разбирать нужно как это делает функция main, т.е. int argc и char* argv[]. Или я что не так понял
<< RSDN@Home 1.1.4 stable rev. 510>>
Re[4]: Рост памяти и дескрипторов при ShellExecute()
Здравствуйте, SpLove, Вы писали:
SL> Стоп стоп стоп Как я вас понял вы хотите вместо ярлыка использовать командную строку? Но ведь если вызвать свойства любого ярлыка в поле объект и будет написана та самая командная строка. А параметры разбирать нужно как это делает функция main, т.е. int argc и char* argv[]. Или я что не так понял
В программе на WinAPI c помощью CreateProcess запустите программу с именем "cmd.exe" так, что бы цвет фона у нее был синий, а цвет букв желтый, размер окна был бы 100x40, а разбер буфера экрана 100x400. Сможете?
А вот если создать ярлык к cmd.exe, то в его свойствах можно все это настроить. Но тогда запуск нужно делать с помощью ShellExecute, т.к. CreateProcess запускает только exe и com файлы.
Мне хотелось бы иметь механизм, позволяющий запускать ЛЮБОЙ ярлык (а не для одной конкретной программы, с заранее заданными параметрами) не используя ShellExecute.
Re[5]: Рост памяти и дескрипторов при ShellExecute()
Здравствуйте, sandrey_, Вы писали:
_>В программе на WinAPI c помощью CreateProcess запустите программу с именем "cmd.exe" так, что бы цвет фона у нее был синий, а цвет букв желтый, размер окна был бы 100x40, а разбер буфера экрана 100x400. Сможете?
запусти cmd.exe, в свойствах окна настрой цвета и шрифты, скажи ЭSave properties for future windows with same title", посмотри, что записалось в HKEY_CURRENT_USER\Console\твоё_окно\. Теперь если ты перед запуском своей консоли создашь этот ключ с нужными параметрами — получишь окно нужного размера и цвета.