mirror of
https://github.com/modernw/App-Installer-For-Windows-8.x-Reset.git
synced 2026-06-14 03:16:38 +10:00
86 lines
2.0 KiB
C#
86 lines
2.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using DataUtils;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace Manager
|
|
{
|
|
[ComVisible (true)]
|
|
[ClassInterface (ClassInterfaceType.AutoDual)]
|
|
public class BridgeExt: Bridge._I_BridgeBase
|
|
{
|
|
Form currentWnd = null;
|
|
public BridgeExt (Form wnd, IScriptBridge isc, IWebBrowserPageScale iwbps, ITaskbarProgress itp) : base (wnd, isc, iwbps, itp)
|
|
{
|
|
currentWnd = wnd;
|
|
}
|
|
private static void CallJS (object jsFunc, params object [] args)
|
|
{
|
|
if (jsFunc == null) return;
|
|
try
|
|
{
|
|
// 这里固定第一个参数为 thisArg(比如 1)
|
|
object [] realArgs = new object [args.Length + 1];
|
|
realArgs [0] = jsFunc; // thisArg
|
|
Array.Copy (args, 0, realArgs, 1, args.Length);
|
|
|
|
jsFunc.GetType ().InvokeMember (
|
|
"call",
|
|
BindingFlags.InvokeMethod,
|
|
null,
|
|
jsFunc,
|
|
realArgs
|
|
);
|
|
}
|
|
catch
|
|
{
|
|
// ignore errors in callback invocation
|
|
}
|
|
}
|
|
public Task CreateAppShortcut (string installLocation, string appUserModelId, object successCallback, object failedCallback)
|
|
{
|
|
var tcs = new TaskCompletionSource<bool> ();
|
|
var scf = new ShortcutCreateForm ();
|
|
scf.Owner = currentWnd;
|
|
scf.FormClosed += (s, e) =>
|
|
{
|
|
bool success = scf.IsSuccess;
|
|
tcs.TrySetResult (success);
|
|
var data = new
|
|
{
|
|
succeeded = scf.IsSuccess,
|
|
message = scf.Message
|
|
};
|
|
string json = JsonConvert.SerializeObject (data);
|
|
if (currentWnd.InvokeRequired)
|
|
{
|
|
currentWnd.BeginInvoke (new Action (() =>
|
|
{
|
|
if (success)
|
|
CallJS (successCallback, json);
|
|
else
|
|
CallJS (failedCallback, json);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (success)
|
|
CallJS (successCallback, json);
|
|
else
|
|
CallJS (failedCallback, json);
|
|
}
|
|
scf.Dispose ();
|
|
};
|
|
scf.Show (currentWnd);
|
|
scf.InitCreater (installLocation, appUserModelId);
|
|
return tcs.Task;
|
|
}
|
|
}
|
|
}
|