簡體   English   中英

Windows 7:使用“應用程序路徑”與“批處理文件”運行應用程序

[英]Windows 7: Running application using App Paths vs Batch File

我在一個帶有子目錄的文件夾中有一個(PowerBuilder)應用程序(我們稱其為MyApp.exe),該子目錄包含所有必需的dll。 通過將應用程序路徑和關聯的路徑變量添加到Windows App Paths注冊表項,我可以運行該應用程序。

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths\MyApp.EXE]
"Path"="C:\\Prog32\\MyAPP;C:\\Prog32\\MyAPP\\DLL\\;"
@="C:\\Prog32\\MyApp\\MyApp.EXE"

上面的運行文件。 我什至不必注冊DLL。

如果可能的話,我想使用批處理文件運行它,因為用戶可以在單獨的文件夾中安裝同一應用程序的多個版本。 當我嘗試在批處理文件中執行相同的操作時,它找不到DLL。

@SETLOCAL
SET CURDIR=%~dp0
CD %CURDIR%
PUSHD %CURDIR%

SET PATH=%CURDIR%;%CURDIR%\dll;%PATH%
start "" %CURDIR%\myApp.exe
POPD

ENDLOCAL

我在與可執行文件MyApp.exe相同的目錄中創建了該批處理。 我期望它會找到DLL,就像App Paths PATH設置一樣。 批處理文件錯誤指出無法找到DLL。 在這種情況下,我們需要注冊DLL嗎? 為什么要區別對待?

筆記:

  1. 如果我將所有必需的DLL復制到與可執行文件相同的目錄(沒有DLL子目錄),則它運行良好,而無需擔心PATH或注冊dll。

  2. 我們以前曾使用installShield進行安裝,但管理員擁有自動腳本來復制文件,因此在首次安裝后便避開了InstallShield程序。 我正在嘗試改進流程,因此將簡化它們的復制。

在此先感謝您提出的所有寶貴意見和建議。

為什么要區別對待?

因為Windows在搜索庫時一團糟。 請參閱http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms682586.aspx#search_order_for_desktop_applications

確定搜索順序的方式有很多要素,但總的來說是這樣的

檢查圖書館...

  1. 已經加載到內存中
  2. 在KnownDLL列表上
  3. 在應用程序的目錄中
  4. 在系統目錄中
  5. 在16位系統目錄中
  6. 在Windows目錄中
  7. 在當前工作目錄中
  8. 在PATH環境變量中列出的目錄中

總的來說,我會同意MSDN在其“ DLL重定向”頁面上的聲明。

優良作法是在包含應用程序的同一目錄中安裝應用程序DLL。

但是,如果要使用子文件夾來組織應用程序,則可以考慮使用Application Manifests 其他嘗試是將庫目錄設置為工作目錄

@ECHO off
SETLOCAL
SET "CURDIR=%~dp0"
PUSHD "%CURDIR%\dll"
start "" /D "%CURDIR%\dll" "%CURDIR%\myApp.exe"
POPD
ENDLOCAL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM