当WinForm尝试连接到UWP

时间:2018-03-11 18:08:34

标签: c# winforms uwp

我过去几个周末一直在开发一个UWP应用程序。 UWP应用程序依赖Win32(WinForms)组件在系统托盘中显示NotifyIcons。由于应用程序的性质,我需要UWP和WinForms组件之间的双向通信。两者都是用C#编程的。对不起,如果我错过了互联网上的一些或其他指南,但我已经挣扎了很长时间了。

我开始的方式是创建一个带有UWP项目的新解决方案,然后,之后,我制作了WinForms项目。 (没有桌面桥接或其他什么,一切都是全新的)

我的package.appxmanifest内容:

<Capabilities>
    <Capability Name="internetClient" />
    <rescap:Capability Name="runFullTrust" />
   </Capabilities>
   <Applications>
    <Application Id="App" Executable="Check Locked Keys (Free).exe" 
        EntryPoint="Check_Locked_Keys__Free_.App">
      <uap:VisualElements DisplayName="Check Locked Keys (Free)" 
        Square150x150Logo="Assets\Square150x150Logo.png" 
         Square44x44Logo="Assets\Square44x44Logo.png" Description="Check Locked 
          Keys (Free)" BackgroundColor="transparent">
        <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
      <Extensions>
        <uap:Extension Category="windows.appService">
          <uap:AppService Name="CheckLockedKeysFreeService" />
        </uap:Extension>
        <desktop:Extension Category="windows.fullTrustProcess" Executable="Win32\NotifyIconsComponent.exe" />
      </Extensions>
    </Application>

WinForms组件中的代码:

    public static AppServiceConnection connection;
    static AutoResetEvent appServiceExit;

    [STAThread]
    static void Main()
    {
        Mutex mutex = null;
        if (!Mutex.TryOpenExisting("NotifyIconsLogicMutex", out mutex))
        {
            mutex = new Mutex(false, "NotifyIconsLogicMutex");
            InitAppServiceConnection();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new NotifyIconsLogic());
            mutex.Close();
        }
    }

    static async void InitAppServiceConnection()
    {
        NotifyIconsLogic notifyIconsLogic = new NotifyIconsLogic();
        connection = new AppServiceConnection();
        connection.PackageFamilyName = "859e8059-e2b6-4ce1-df076201303e_q0ycx5bathybm"; 
        connection.AppServiceName = "CheckLockedKeysFreeService";
        connection.RequestReceived += notifyIconsLogic.OnRequestReceived;
        connection.ServiceClosed += Connection_ServiceClosed;
        AppServiceConnectionStatus connectionStatus = await connection.OpenAsync();

        MessageBox.Show(connectionStatus.ToString());
    }

    private static void Connection_ServiceClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)
    {
        // exit app
        appServiceExit.Set();
    }

现在,它编译得很好,但它只是弹出一个消息框,说AppNotInstalled。??

如果需要更多代码段,请告诉我。

此外,当我运行UWP应用程序(自动启动Win32组件)时,如何调试Win32组件?我试图将另一个Visual Studio实例附加到它,但它只是给我一个错误,说已经有一个调试器附加到它。

请注意,我在WinForms平台上有很多经验,但在UWP方面却没有那么多。

我做错了什么?

谢谢

Dilan

1 个答案:

答案 0 :(得分:1)

使用Package.Current.Id.FamilyName获取软件包系列名称并避免使用硬编码的系列名称。