【问题标题】:Is it possible to set fixed DLL search path in VisualStudio application? [duplicate]是否可以在 VisualStudio 应用程序中设置固定的 DLL 搜索路径? [复制]
【发布时间】:2016-08-15 17:14:17
【问题描述】:

我有一个 Qt/VisualStudio 应用程序,它应该从可移动设备启动而无需安装。我只想将可执行文件和所有必需的DLL放在根目录中的目录“data”中。

可执行文件应从“数据”加载 DLL,但之前不应设置“数据”的路径。 DLL 搜索路径应在 exe 中进行硬编码,并且应(仅)为“.\data”

有可能吗?我正在使用VS2008。我已经阅读了每个链接器参数的文档,但还没有确定合适的。

【问题讨论】:

  • 启动器不能帮你吗?
  • 我认为清单文件可以做到这一点(不确定):msdn.microsoft.com/en-us/library/aa375365(v=vs.85).aspx
  • 将所有内容链接为/delayload,并拥有来自“数据”目录的helper function LoadLibrary DLL。
  • 你想把code放在一个名为“data”的目录中??有点折腾谁会更讨厌,你客户的 IT 员工是你不应该忽视的人。但你肯定会讨厌先写清单。
  • 我看到你有很好的 C++ 知识。用纯 C 语言编写一个带有本机 Win32 API 的简单应用程序(使用 VS,如果你没有付费版本,则免费版本)作为启动器需要大约 15 分钟......(是的,我注意到了 "不会射击 DOS 控制台")

标签: c++ visual-studio dll dll-search-path


【解决方案1】:

正如 mvidelgauz 所建议的,我已经使用 winapi 实现了一个启动器。这是我的第一个原生 winapi 项目,但确实只用了半个小时就实现了。

  1. 我在 VS2008 中创建了一个默认的 Win32 项目。

  2. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 中,删除了以下行:

    //ShowWindow(hWnd, nCmdShow);
    //UpdateWindow(hWnd);
    
  3. 然后我补充说:

    SetCurrentDirectory( L"MyPath" );
    ShellExecute(hWnd, NULL, L"MyApp.exe", L"-l", NULL, SW_HIDE);
    DestroyWindow(hWnd);
    

【讨论】:

  • 您不需要(实际上也不应该使用)该窗口。删除所有注册窗口类、创建窗口等的代码。您需要的只是具有两个函数调用的wWinMain 函数:SetCurrentDirectoryShellExecuteShellExecutehWnd 参数可以(在这种情况下,应该)是NULL,这意味着该操作与窗口无关。
  • 谢谢!会试试的。
猜你喜欢
  • 2010-10-01
  • 2010-10-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多