[英]Relative paths not working if batch file calls exe based on OS architecture
我有一個要求,我需要根據體系結構運行特定的.exe。
我的文件夾結構是這樣的:
Tools文件夾如下所示
在那下Binaries文件夾包含2個子文件夾(一個用於32/64位)
每個文件夾(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.