簡體   English   中英

如果批處理文件基於OS體系結構調用exe,則相對路徑不起作用

[英]Relative paths not working if batch file calls exe based on OS architecture

我有一個要求,我需要根據體系結構運行特定的.exe。

我的文件夾結構是這樣的: 主文件夾層次結構

Tools文件夾如下所示 工具文件夾

在那下Binaries文件夾包含2個子文件夾(一個用於32/64位) 二進制

每個文件夾(x64 / x32)如下所示: X64文件夾(同樣是x32文件夾)

Root文件夾包含調用相應exe的.bat(start.bat)文件(例如:如果它是32位,它調用“\\ Binaries \\ x86 \\ Tool.exe”或如果它是64位,則調用“\\ Binaries” \\ 64 \\ Tool.exe”。

start.bat中的代碼如下:

@ECHO OFF
if exist "%SYSTEMDRIVE%\Program Files (x86)\" (
   start "" /d "%~dp0" "Binaries\x86\Tool.exe"
) else (
   start "" /d "%~dp0" "Binaries\x64\Tool.exe"
)

調用很好,它調用特定的.exe。 當.exe應用程序嘗試使用XML文件(每個文件夾還包含一個XML文件,parameters.xml和exe)時,會出現問題,它會引發錯誤。 我使用相對路徑(“./parameters.xml”)訪問XML文件。

我嘗試使用“System.AppDomain.CurrentDomain.BaseDirectory”重新編碼代碼(因為這是一個WPF exe)。 這適用於相對路徑,但另一種情況失敗。 我將在下面解釋:

在應用程序中,我將在計算機上安裝SQL實例。 要實現這一點,我使用以下代碼:

internal static List < string > SQLServerInstances() {
    var sqlInstances = new List < string > ();

    try {
        using(RegistryKey sqlKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").
        OpenSubKey(@
        "SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL")) {
            if (sqlKey != null) {
                foreach(string versionKeyName in sqlKey.GetValueNames()) {
                    sqlInstances.Add(versionKeyName);
                }
            }
        }
    } catch (Exception de) {
        throw de;
    }
}

如果我使用批處理文件來運行.exe,則此代碼不返回任何實例。 如果我直接從“Binaries \\ x64 \\ Tool.exe”運行.exe,此代碼將傳遞並正確返回SQL實例。

我不確定是什么問題。 這可能是預期的行為,但似乎有點奇怪。

嘗試以這種方式更改start.bat代碼:

@ECHO OFF
cd "%~dp0"
if exist "%SYSTEMDRIVE%\Program Files (x86)\" (
   start "" "Binaries\x86\Tool.exe"
) else (
   start "" "Binaries\x64\Tool.exe"
)

暫無
暫無

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

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