UWP应用程序中的可扩展性(插件)

UWP应用程序中的可扩展性(插件),uwp,win-universal-app,Uwp,Win Universal App,我们正在调查UWP是否可以作为WPF应用程序的合适替代品。在我们的WPF应用程序中,我们使用可扩展性(插件)向我们的应用程序添加额外的(特定于客户的)逻辑。我们目前使用NuGet包来部署/更新这些扩展,并在运行时加载它们 在UWP中,是否可以: 在UWP中动态加载插件(我认为这是不可能的,因为沙箱可能会阻止加载动态模块) 通过商店交付这些扩展(但需要为任何其他用户隐藏) LoadPackagedLibrary可以动态加载UWP中的插件 但它只能在appx中加载dll 如何使用LoadPackag

我们正在调查UWP是否可以作为WPF应用程序的合适替代品。在我们的WPF应用程序中,我们使用可扩展性(插件)向我们的应用程序添加额外的(特定于客户的)逻辑。我们目前使用NuGet包来部署/更新这些扩展,并在运行时加载它们

在UWP中,是否可以:

  • 在UWP中动态加载插件(我认为这是不可能的,因为沙箱可能会阻止加载动态模块)
  • 通过商店交付这些扩展(但需要为任何其他用户隐藏)

  • LoadPackagedLibrary可以动态加载UWP中的插件

    但它只能在appx中加载dll

    如何使用LoadPackagedLibrary,请参阅

    如果要使用其他目录中的win32 dll,请获取可以使用它的LoadLibrary

    你可以用

    MEMORY_BASIC_INFORMATION info = {};  
    if (VirtualQuery(VirtualQuery, &info, sizeof(info)))  
    {
        auto kernelAddr = (HMODULE)info.AllocationBase;
        auto loadlibraryPtr = GetProcAddress(kernelAddr, "LoadLibraryExW");
        // load your library here ...
    }
    
    获取loadlibrary并使用loadlibrary加载dll

    Ms使用PE和p/Invoke来判断uwp是否使用了不允许的dll


    因此,您可以使用loadlibrary来加载它。

    LoadPackagedLibrary可以动态加载UWP中的插件

    但它只能在appx中加载dll

    如何使用LoadPackagedLibrary,请参阅

    如果要使用其他目录中的win32 dll,请获取可以使用它的LoadLibrary

    你可以用

    MEMORY_BASIC_INFORMATION info = {};  
    if (VirtualQuery(VirtualQuery, &info, sizeof(info)))  
    {
        auto kernelAddr = (HMODULE)info.AllocationBase;
        auto loadlibraryPtr = GetProcAddress(kernelAddr, "LoadLibraryExW");
        // load your library here ...
    }
    
    获取loadlibrary并使用loadlibrary加载dll

    Ms使用PE和p/Invoke来判断uwp是否使用了不允许的dll


    因此,您可以使用loadlibrary来加载它。

    从周年更新开始,UWP本机支持可通过Windows应用商店分发的应用程序扩展。你可以找到更多信息,或者


    您可以在devcenter仪表板中管理UWP应用程序的可见性(我认为对于应用程序扩展也可以这样做)。查看以获取更多信息。

    从周年更新开始,UWP本机支持可通过Windows应用商店分发的应用程序扩展。你可以找到更多信息,或者


    您可以在devcenter仪表板中管理UWP应用程序的可见性(我认为对于应用程序扩展也可以这样做)。查看以获取更多信息。

    尝试使用LoadPackagedLibrary尝试使用LoadPackagedLibrary可以绕过WACK,但如果您开始调用不受支持的API,这将导致未定义的行为,你的应用程序迟早会失败。@PeterTorr MSFT它可以通过wack并调用win32 api,它也可以工作。它今天可能工作,但明天可能会中断。你的建议不受支持。任何人都不应该在生产应用程序中这样做。@PeterTorr MSFT但有一种解决方法。Ms在他们的edge和store应用程序中打破了规则。但这是UWP。因此它应该遵守规则。可以绕过怪癖,但如果你开始调用不受支持的API,这将导致未定义的行为,你的应用程序迟早会失败。@PeterTorr MSFT它可以通过wack并调用win32 api,它也可以工作。它今天可能工作,但明天可能会中断。你的建议不受支持。任何人都不应该在生产应用程序中这样做。@PeterTorr MSFT,但有一种方法可以解决它。Ms在他们的edge和store应用程序中打破了规则。但这是UWP。因此它应该遵守规则。