ダウンロード マネージャー アプリケーションの構築を計画しており、ユーザーがサイトのボタンをクリックしたときにアプリケーションを起動できるようにしたいと考えています。アプリケーションは、明らかに、クライアント マシンに既にインストールされている必要があります。
これが Silverlight を使用して記述される必要がある理由はいくつかありますが、それらは質問とはあまり関係がありません。人々が私が別のテクノロジーを使用することを示唆しないように、私はそれについて言及するだけです.
ダウンロード マネージャー アプリケーションの構築を計画しており、ユーザーがサイトのボタンをクリックしたときにアプリケーションを起動できるようにしたいと考えています。アプリケーションは、明らかに、クライアント マシンに既にインストールされている必要があります。
これが Silverlight を使用して記述される必要がある理由はいくつかありますが、それらは質問とはあまり関係がありません。人々が私が別のテクノロジーを使用することを示唆しないように、私はそれについて言及するだけです.
他の 2 つの投稿 [ 1 ] と [ 2 ]を少しマッシュアップします。
もちろん、これは Mac ではなく Windows でのみ機能します。@michael-s-scherotterスタイルのソリューションにフォールバックする必要があります。
private void Button_Click(object sender, RoutedEventArgs e)
{
if (Application.Current.HasElevatedPermissions && System.Windows.Interop.ComAutomationFactory.IsAvailable)
{
string run = "\""%ProgramFiles%\\Microsoft Silverlight\\sllauncher.exe"\" /emulate:"Silverface.xap" /origin:\"http://www.silverlight.net/content/samples/apps/facebookclient/ClientBin/Silverface.xap\" /overwrite";
dynamic cmd = ComAutomationFactory.CreateObject("WScript.Shell");
cmd.Run(run, 1, true);
}
}
ユーザーがクリックするたびにアプリをインストールすることに同意する場合は可能です。
また、OOB 設定で昇格された信頼を要求するようにアプリを設定する必要があります。
起動時にアプリをアンインストールするだけです (たとえば、メイン ウィンドウ コンストラクターで)。
if (Application.Current.HasElevatedPermissions && Application.Current.InstallState == InstallState.Installed)
{
string launcherPath = string.Empty;
using (dynamic shell = AutomationFactory.CreateObject("Shell.Application"))
{
string launcher64 = @"C:\Program Files (x86)\Microsoft Silverlight";
string launcher32 = @"C:\Program Files\Microsoft Silverlight";
dynamic folder64 = shell.NameSpace(launcher64);
if (folder64 != null)
{
launcherPath = launcher64;
}
else
{
dynamic folder32 = shell.NameSpace(launcher32);
if (folder32 != null)
{
launcherPath = launcher32;
}
}
}
using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
{
var origin = Application.Current.Host.Source.OriginalString;
var launchCmd = string.Format(@"""{0}\sllauncher.exe"" /uninstall /origin:""{1}""", launcherPath, origin);
shell.Run(launchCmd);
}
}
(アンインストールのコードはこの投稿から取得しました: http://www.wintellect.com/blogs/sloscialo/programmatically-uninstalling-silverlight-out-of-browser-application )
インストールした Silverlight OOB を Silverlight アプリからブラウザー内で起動するトリックを見つけました。両方のアプリケーションを署名し、信頼を高める必要があります。
using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
{
shell.Run(launchPath);
}
このトリックがお役に立てば幸いです:)