我过去几个周末一直在开发一个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
答案 0 :(得分:1)
使用Package.Current.Id.FamilyName获取软件包系列名称并避免使用硬编码的系列名称。