C ++ переместить DLL-файлы из корня в подпапку - PullRequest
4 голосов
/ 10 февраля 2011

Я делаю программу на Visual C ++.Программа использует некоторые DLL-файлы, которые я не хочу размещать в system32.Теперь файлы DLL находятся в той же папке, что и мой .exe, но я хотел бы переместить их в подпапку.Проблема в том, что если я переместил файлы, мое приложение не запускается и выдает следующее сообщение об ошибке:


MyProgram.exe - невозможно найти компонент

Это приложение не можетначать, потому что myDll.dll не был найден.Переустановка приложения может решить проблему.


У меня раньше была такая же проблема, где, если я нашел решение, которое включало добавление чего-либо в реестр, но я забыл, как это работает, и теперь я не могу найти руководство снова.

Может кто-нибудь помочь мне?

Ответы [ 3 ]

3 голосов
/ 10 февраля 2011

Существует несколько способов решения этой проблемы. Как уже упоминалось, вы можете изменить путь поиска вашего приложения в реестре. Иногда у вас нет прав на запись в реестр или вы не можете делать это по другим причинам, тогда вы можете явно указать путь к dll, для функции WinAPI это SetDllDirectory, смотрите MSDN .

1 голос
/ 10 февраля 2011

Звучит так, будто вы набрали ключ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths См. здесь для получения полной информации. Короче говоря, строка с именем Path указывает на путь поиска DLL. Например, если ваше приложение называется «MyApp», файл .reg, подобный этому, сработает:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\MyApp.exe]
@="C:\\Program Files\\MyCompany\\MyApp\\MyApp.exe"
"Path"="C:\\Program Files\\MyCompany\\MyApp\\DLLs"
0 голосов
/ 10 февраля 2011

Я считаю, что это статья, которую вы ищете:

http://www.codeguru.com/Cpp/W-P/dll/article.php/c99

Теперь каждое приложение может хранить свой собственный путь в реестре под следующим ключом:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Пути к приложениям

Используйте путь к приложению, установите ключ для вашего приложения, используя ONE.EXE из приведенного выше примера:

HKEY_LOCAL_MACHINE ... \ CurrentVersion \ Пути к файлам \ ONE.exe

Задайте в качестве значения (по умолчанию) полный путь к исполняемому файлу, например:

C: \ Program Files \ ONE \ ONE.exe

Добавить подраздел с именем Path

...