在网页上启动已经注册协议的本地OOB程序:
1、在网页上用JS写调用
2、在打程序的安装包时写注册代码
我们的如下:
注册代码:
local Strs=String.Concat("\"",SessionVar.Get("%AppFolder%"));
Strs=String.Concat(Strs,"\\Yongji.exe\" \"%1\"")
Registry.CreateKey(HKEY_CLASSES_ROOT, "yongji");
Registry.SetValue(HKEY_CLASSES_ROOT, "yongji", "", "URL:Yongji Protocol", REG_SZ);
Registry.SetValue(HKEY_CLASSES_ROOT, "yongji", "URL Protocol", "", REG_SZ);
Registry.CreateKey(HKEY_CLASSES_ROOT, "yongji\\DefaultIcon");
Registry.SetValue(HKEY_CLASSES_ROOT, "yongji\\DefaultIcon", "", "C:\\Windows\\System32\\url.dll,0", REG_SZ);
Registry.CreateKey(HKEY_CLASSES_ROOT, "yongji\\shell");
Registry.CreateKey(HKEY_CLASSES_ROOT, "yongji\\shell\\open");
Registry.CreateKey(HKEY_CLASSES_ROOT, "yongji\\shell\\open\\command");
Registry.SetValue(HKEY_CLASSES_ROOT, "yongji\\shell\\open\\command", "", Strs, REG_SZ);
3、因为网页调用本地程序只能是exe程序,所以SL的XAP是没法调用的。我实现的方法是用批处理写了一个启动本地程序的文件生成exe,并把这个exe注册到注册表以便网页来调用。
4、这个批处理设计的原理是启动SL的sllancher.exe并传参给它。这个参数是多少就要从注册表里读了,因为安装SL程序的时候都在注册表HKCU\Software\microsoft\windows\currentversion\uninstall下面有相应的信息,所以我的批处理就是在这儿找参数。以下是我的批处理的内容:
echo off
for /f "tokens=1 delims=:" %%i in ('reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall') do (
for /f "tokens=3,*" %%a in ('reg query %%i /v "Publisher"') do (if %%a == www.yongji100.com (for %%k in ("%%%i%") do (start "" "%ProgramFiles%\Microsoft Silverlight\sllauncher.exe" %%~nxi /origin:http://www.yongji100.com/))
)
)