假设我在Windows 8+上,我有一个Win32/C应用程序.我的Win32 App可以调用WinRT API吗?
我们正在修复重新构建应用程序,并且正在讨论是否可以使用UWP而不是普通的WPF应用程序.
我们的应用程序需要能够访问整个文件系统和所有系统资源.这是一个问题,因为UWP应用程序是沙箱.但是,我们试图通过尝试以这种方式处理它来绕过该问题:
Windows服务 - >始终在系统上运行.这将在访问和修改系统资源时承载核心功能.
UWP应用程序 - >由于UWP是沙盒,UWP应用程序会将所有系统请求转发到Windows服务,这将完成所有主要工作并返回输出.
我们可以简单地在WPF中执行此操作,但我们希望使用UWP以利用WPF缺少的一些新的Windows 10核心功能,例如live tiles和Cortana.
你认为我们的方法是否可行?我们的一个不确定因素是我们如何让UWP应用程序与Windows服务进行通信 - 我们已经研究过SignalR和Desktop Bridge这样的东西,但不确定哪种方法可能是我们方案的最佳方法.
谢谢!
我正在使用带有 ac# Winforms 应用程序的 Desktop Bridge 来制作要发布到商店的包。
如果我使用 Desktop Bridge 在本地制作我的包,那么我可以成功地将它上传到 Windows 商店。
我现在还可以使用管道构建和创建包工件,并且可以在工件资源管理器中看到它。
我在遵循有关如何将包裹放入商店的文档时遇到问题。
它提到
ps
$(Build.ArtifactStagingDirectory)\
AppxPackages\MyUWPApp__$(AppxVersion)_x86_x64_ARM_bundle.appxupload
Run Code Online (Sandbox Code Playgroud)
ps是指powershell吗?
我如何获得 YAML?
还是我打算建立一个发布管道?
我尝试查看发布任务,但找不到任何提到 Store 的内容。
yaml windows-store azure-devops azure-pipelines desktop-bridge
我想创建一个像在全球通用的绘图应用程序中看到的标尺。我发现我可以使用Inkedit控件或此示例创建类似的内容,但是两者似乎都只能在特定应用程序内部运行。
有没有办法使这两个工具都能全局工作,并创建一个可以重新调整笔输入位置的系统范围的工具?.Net类型的鼠标钩会以任何方式提供帮助吗?如果是这样,如果可能的话,我将如何只抓住笔呢?或者在最坏的情况下,我的尺子可以同时抓住两者吗?
我还研究了输入注入,确实可以将UWP应用程序中捕获的输入注入到不相关的应用程序中。但是,这也存在问题:
解决了。(请参阅我的回答。)
我有几个使用桌面桥的启动应用程序。过去,它们过去工作正常。现在,可能是在Windows更新之后,重新启动后它们没有在我第一次登录时启动,甚至没有出现在任务管理器的启动选项卡中。我注销并再次登录后,它们立即启动,并出现在任务管理器中。
更多信息
他们都用desktop:Extension Category="windows.startupTask"。在登录选项中,我已关闭 “使用登录信息自动...” 。
编辑
该问题在2019年7月的最后一次Windows更新之后自行解决。
编辑2
发言时间过早。问题又回来了。并且在注销并重新登录后,它(总是()?)无法自行解决。似乎过了几分钟(比启动延迟的10秒要多得多),它们确实出现了(有时?)出现在启动列表中(但可能仅在我手动启动它们之后?)。
我试图弄清楚,是否有可能using Windows.Media.SpeechRecognition; args.Result.Text作为参数从UWP发送到控制台应用程序。
例如,通过遵循以下方案,我将发送TextToSpeech(args.Result.Text);具有args.Result.Text;价值的值,其中using Windows.Media.SpeechSynthesis;每次出现时,文本语音转换都会发出识别结果args.Result.Text;。textBlock2.Text = args.Result.Text;还显示结果:
private async void ContinuousRecognitionSession_ResultGenerated(
SpeechContinuousRecognitionSession sender, SpeechContinuousRecognitionResultGeneratedEventArgs args)
{
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
textBlock1.Text = args.Result.Text;
TextToSpeech(args.Result.Text);
});
}
Run Code Online (Sandbox Code Playgroud)
但如果我要发送args.Result.Text;作为参数传递给控制台应用程序,包括与UWP在桌面桥包:
private async void ContinuousRecognitionSession_ResultGenerated(
SpeechContinuousRecognitionSession sender, SpeechContinuousRecognitionResultGeneratedEventArgs args)
{
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
textBlock1.Text = args.Result.Text;
SendTTSResult(args.Result.Text);
});
}
Run Code Online (Sandbox Code Playgroud)
到请求的功能:
private async void SendTTSResult(string res)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () …Run Code Online (Sandbox Code Playgroud) 我的应用程序是用 WPF C# 编写的,我直接从 Visual Studio 使用 MSIX 应用程序项目将其导出为通用应用程序。
我只是无法让设置在更新之间保持不变。我在MainWindow_Loaded事件中使用以下代码:
Settings.Default.Upgrade();
Settings.Default.Save();
Settings.Default.Reload();
Run Code Online (Sandbox Code Playgroud)
我尝试保持程序集信息版本相同,只是增加 appx.manifest 中的版本,但它不起作用。
我注意到,每次应用程序更新时,它都会创建一个新的唯一命名的父设置文件夹(每次都有新的哈希值),并且子文件夹名称是程序集中的版本。文件夹结构是这样的:
App.exe_Url_dfvfmfjs1qo33zsag1ay5w1s0rwg0u53/0.2.10.0/user.config
App.exe_Url_tazrvujdga5ujjarnahpkoscv5zbkgl0/0.2.10.0/user.config
我相信这可能与它不断生成新的哈希值而不是仅仅将新版本作为子文件夹放置这一事实有关,这就是升级不执行任何操作的原因。
到目前为止我发现的唯一信息是使用Settings.Default.Upgrade()
当我的通用桌面桥接应用程序更新时,我该如何将旧版本设置转移到新版本?
我有一个大型的 win32 程序,其中包含本机和托管代码的混合。我想将它放入一个 .Appx 文件中,以便在 Windows 10 上进行简单安装。我不想将它放在 Windows 应用商店中 - 我只想用 .Appx 文件替换旧的安装程序。
使用DesktopAppConverter,我已将程序转换为 .Appx。我的问题是 DesktopAppConverter 添加了对“Microsoft.VCLibs.140.00.UWPDesktop”的依赖,这意味着我必须分发我的 .appx 和 Microsoft.VCLibs.x64.14.00.Desktop.appx。所以用户不能再只点击我的 .appx 文件,而是必须从 PowerShell 运行它:
Add-AppxPackage .\MyApp.appx -DependencyPath .\Microsoft.VCLibs.x64.14.00.Desktop.appx
有没有办法可以将依赖项“合并”到单个 .appx 中,用户只需双击即可安装?
appx windows-10-universal desktop-app-converter desktop-bridge
我正在尝试遵循UWP 与桌面扩展 \xe2\x80\x93 第 2 部分UWP 和 WinForms 桌面桥调用进程并传递参数。此示例 Console Program.cs代码包含参数字符串:
\n\n string parameters = ApplicationData.Current.LocalSettings.Values["parameters"] as string;\nRun Code Online (Sandbox Code Playgroud)\n\n但该名称ApplicationData在当前上下文中不存在,我试图找出是否遗漏了一些参考或者它是 C# 的不同版本
我不确定即使它是它所需要的,但添加引用Windows.Foundation.UniversalApiContract.windmd会引发另一个错误Values:
\n\n错误 CS0012 类型“IPropertySet”是在未引用的程序集中定义的。您必须添加对程序集的引用\n \'Windows.Foundation.FoundationContract
\n
我曾想将我的应用程序的新版本(WPF 通过 Desktop Bridge 转换为 UWP)发布到 Microsoft Store,但它未能通过认证并出现以下警告:
- 文件 **.exe 既没有在清单中显示 PerMonitorV2,也没有调用 DPI 感知 API(例如:user32!SetProcessDpiAwarenessContext 或 user32!SetThreadDpiAwarenessContext)。
- 该应用程序 *** 不支持 DPI。
我有以下问题:
首先,我在去年年底发布了我的应用程序的第一个版本,DPI 感知没有任何问题。所以这是一个新的测试?
由于这只是一个警告,所有其他测试都已通过,这可能是认证过程失败的原因吗?
所以我试图让我的应用程序 DPI 感知......
根据这个描述,我调用了SetProcessDpiAwarenessContext函数并检查了所有四个值。使用unaware和System aware标志时,我的应用程序看起来很模糊,使用Per Monitor标志时看起来不错,但是当我请求屏幕尺寸时,它返回原始宽度和高度,不计算比例(我有 150% 的比例),因此我的窗口被定位到屏幕的错误部分。问题是,如果只需要设置这 4 个标志,并且没有一个标志作为默认值(不设置任何内容),那么默认设置是什么?
好的,这里列出了 5 个标志,但它们都不起作用,就好像没有设置任何东西一样。
多谢!
desktop-bridge ×10
c# ×6
uwp ×6
winapi ×2
wpf ×2
.net ×1
appx ×1
azure-devops ×1
events ×1
publishing ×1
signalr ×1
windows ×1
yaml ×1