我正在嘗試在本地計算機的IE9中爲Sublime Text創建一個Web協議。我跟着Microsoft's add a protocol guide here。Windows - 啓動命令和協議處理程序
不幸的是,我無法將command
密鑰的註冊表值直接鏈接到崇高,因爲協議sublime:
被追加到地址。所以,如果我輸入sublime:test.txt
,那麼整個字符串就會傳遞給崇高,崇高不知道如何處理它。
於是,我做了一個快速批處理文件來消毒字符串,subl.bat
。
@echo off
echo %1%
pause
set str=%1
set str=%str:sublime:=%
start "" CALL "C:\Program Files\Sublime Text 2\sublime_text.exe" "%str%"
echo %str%
pause
暫停只是爲了調試,可以忽略。這個批處理文件只是刪除參數的sublime:
部分,然後調用通過消毒參數的sublime。
現在,當我改變我的command
註冊表鍵:
「C:\ subl.bat」 「%1」
,然後嘗試一下在Internet Explorer中,我得到的錯誤file path not found
。那麼,如果你嘗試使用start
命令運行名稱爲引號的引號中的批處理文件,並且使用start
命令引用參數,則實際上需要爲窗口標題預先添加一個字符串,並在其後面插入CALL
命令,就像在我的批處理文件中一樣。我的猜測是Internet Explorer使用start
命令或類似的命令,並且由於兩個參數都在引號中,所以它失敗了。我已經試過的值更改爲:
"" CALL "C:\subl.bat" "%1"
和
CALL "C:\subl.bat" "%1"
但既不工作。但是,如果我刪除%1
周圍的引號並且參數沒有空格,則該協議起作用!只要參數和程序有引號,就會中斷。
我真的想弄清楚爲什麼我不能寫在這兩個程序路徑和參數(周圍的每個引號)空格的協議處理程序。有人有主意嗎?
如果你想測試這一點,你不需要每次更改註冊表項時重新啓動電腦,這樣很容易繁殖。
哦,並且該協議在Firefox中可用,但如果文件是test 2.log
,崇高會嘗試單獨打開test
和2
。這是start
命令的另一個例子,因爲如果您查看我的批處理文件,我會將str
變量包含在引號中,以便保留空格。如果我在與sublime相同的目錄中打開提示並使用命令行運行崇高arg c:\test 2.log
崇高正常打開只需test 2.log
而不是test
和2
因此我知道這是start
命令的問題。
編輯:我要補充,我也試過,因爲MSDN說,URI不應包含特殊字符編碼路徑網址,但也不能工作。