CN115269058A - 一种wpf资源加载方法及装置 - Google Patents
一种wpf资源加载方法及装置 Download PDFInfo
- Publication number
- CN115269058A CN115269058A CN202211194773.9A CN202211194773A CN115269058A CN 115269058 A CN115269058 A CN 115269058A CN 202211194773 A CN202211194773 A CN 202211194773A CN 115269058 A CN115269058 A CN 115269058A
- Authority
- CN
- China
- Prior art keywords
- resource
- user
- dll file
- wpf
- dll
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 52
- 238000004590 computer program Methods 0.000 claims description 22
- 238000000034 method Methods 0.000 abstract description 13
- 230000006870 function Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/105—Arrangements for software license management or administration, e.g. for managing licenses at corporate level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Abstract
本发明公开了一种WPF资源加载方法及装置,所述方法包括:将WPF资源代码编译为DLL文件并建立DLL数据库;建立所述DLL文件的用户权限管理表;其中,所述用户权限管理表用于表征用户权限内能够访问的DLL文件路径;根据本次登录的用户权限下载权限DLL文件至预设位置;根据所述权限DLL文件读取资源字典并添加至目标程序。本申请技术方案将WPF资源代码编译为动态链接文件,无需将所有资源加载至本地内存,从而减少本地内存的占用。同时根据用户权限进行按需加载DLL文件并读取资源字典添加至目标程序,在保证对资源进行加载的同时进一步减少对内存的占用。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种WPF资源加载方法及装置。
背景技术
WPF(Windows Presentation Foundation)是微软推出的基于Windows的用户界面框架,属于.NET Framework 3.0(微软为新一代操作系统Windows Vista而特别设计的集成环境)的一部分,提供了统一的编程模型、语言和框架,做到了分离界面设计人员与开发人员的工作,同时提供了全新的多媒体交互用户图形界面。WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用。而WPF样式是重用元素的格式的重要手段,如果多个控件都应用了多个格式的时候,可以把这些格式封装成格式,然后在资源中定义这个格式,当应用到这个格式时可以直接使用这个样式,从而达到重用格式的手段。在WPF的资源中,几乎可以包含图像,字符串等所有任意CLR对象,只要对象有一个默认的构造函数和独立的属性即可。也就是说,应用程序中非程序代码的内容,比如点阵图,颜色,字型,动画/影片档以及字符串常量值等,均可从程序中独立出来,单独包装成资源。
但WPF的资源本身就需要占用内存和消耗性能,在配置较低的的系统上,程序很容易因为内存占用过高而卡顿。目前WPF加载资源都需要将所有的资源都加载到app.xaml文件中才可以获取资源。而实际应用中打开程序一般仅需要应用其中的部分风格、动画、组件资源或样式,将全部资源引用全部都加载到WPF中会导致程序内存在大量不必要的资源占用,对于配置较低的系统更容易因为内存占用过高而出现卡顿的现象,从而影响程序运行。
发明内容
本申请提供了一种WPF资源加载方法及装置,将WPF资源代码编译为动态链接文件,无需将所有资源加载至本地内存,从而减少本地内存的占用。同时根据用户权限进行按需加载DLL文件并读取资源字典添加至目标程序,进一步减少对内存的占用。
第一方面,本申请提供了一种WPF资源加载方法,包括:
将WPF资源代码编译为DLL文件并建立DLL数据库;
建立所述DLL文件的用户权限管理表;其中,所述用户权限管理表用于表征用户权限内能够访问的DLL文件路径;
根据本次登录的用户权限下载权限DLL文件至预设位置;
根据所述权限DLL文件读取资源字典并添加至目标程序。
这样,区别于现有技术中将所有WPF资源都加载到本地内存中,本申请提供一种WPF资源加载方法,预先将WPF资源代码编译为DLL文件并建立DLL数据库,即动态链接库。在保证实现对所述WPF资源的调用的同时无需将WPF的资源代码全部加载至本地内存,从而减少内存的占用以及系统的性能消耗。进一步的,建立DLL文件的用户权限管理表,获取每个登录DLL数据库的用户能够访问的DLL文件路径,以实现对用户访问权限管理和DLL文件的数据保护,用户在被允许的权限范围内可以将DLL文件下载至于预设位置,按需下载,进一步减少对不需要的冗余资源的下载,减少本地内存的占用,还可以避免不明身份的用户访问数据库产生的数据安全隐患。用户在范围内的DLL文件下载至预设位置后可通过DLL文件读取需要的资源字典并添加至目标应用程序中,以实现对WPF资源的加载应用。
在一种实现方式中,所述将WPF资源代码编译为DLL文件并建立DLL数据库,具体包括:
将所述WPF资源代码编译为通用中间语言;
根据预设编译器将所述通用中间语言编译为本地逻辑脚本;
在预设代码管理器上运行所述本地逻辑脚本,生成DLL文件;
将所述DLL文件上传至预设服务器,建立DLL数据库。
在一种实现方式中,所述建立所述DLL文件的用户权限管理表,具体包括:
当检测到用户表中增加用户ID时,获取增加的用户能够访问的DLL文件;根据用户能够访问的DLL文件在所述用户权限管理表中添加权限管理记录;其中,每一所述权限管理记录表征一个用户ID能够访问的DLL文件路径。
在一种实现方式中,所述根据本次登录的用户权限下载权限DLL文件至预设位置,具体包括:
根据本次登录所述DLL数据库的用户ID与所述用户权限管理表进行关联,获取本次登录的用户能够访问的DLL文件路径;
在第一插件中输入所述能够访问的DLL文件路径以使所述第一插件将所述权限DLL文件下载至所述目标程序指定的预设位置。
在一种实现方式中,所述根据所述权限DLL文件读取资源字典并添加至目标程序,具体包括:
根据第一组件执行所述权限DLL文件以读取资源字典;
根据所述资源字典实例化对应的ResourceDictionary对象;
将所述资源字典的核心属性赋值给所述ResourceDictionary对象的Source属性;
将赋值后的所述ResourceDictionary对象添加至Resources.MergedDictionaries集合以使所述资源字典添加至所述目标程序。
第二方面,本申请还提供一种WPF资源加载装置,包括数据处理模块、权限管理模块、文件下载模块和资源处理模块,具体为:
所述数据处理模块用于将WPF资源代码编译为DLL文件并建立DLL数据库;
所述权限管理模块用于建立所述DLL文件的用户权限管理表;其中,所述用户权限管理表用于表征用户权限内能够访问的DLL文件路径;
所述文件下载模块用于根据本次登录的用户权限下载权限DLL文件至预设位置;
所述资源处理模块用于根据所述权限DLL文件读取资源字典并添加至目标程序。
区别于现有技术中将所有WPF资源都加载到本地内存中,本发明实施例提供一种WPF资源加载装置,通过数据处理模块预先将WPF资源代码编译为DLL文件并建立DLL数据库,即动态链接库。在保证实现对所述WPF资源的调用的同时无需将WPF的资源代码全部加载至本地内存,从而减少内存的占用以及系统的性能消耗。进一步的,建立DLL文件的用户权限管理表,获取每个登录DLL数据库的用户能够访问的DLL文件路径,以实现对用户访问权限管理和DLL文件的数据保护,用户在被允许的权限范围内可以将DLL文件下载至于预设位置,按需下载,进一步减少对不需要的冗余资源的下载,减少本地内存的占用,同时避免不明身份的用户访问数据库产生的数据安全隐患。用户在范围内的DLL文件下载至预设位置后可通过DLL文件读取需要的资源字典并添加至目标应用程序中,以实现对WPF资源的加载应用。
在一种实现方式中,所述数据处理模块用于将WPF资源代码编译为DLL文件并建立DLL数据库,具体包括:
将所述WPF资源代码编译为通用中间语言;
根据预设编译器将所述通用中间语言编译为本地逻辑脚本;
在预设代码管理器上运行所述本地逻辑脚本,生成DLL文件;
将所述DLL文件上传至预设服务器,建立DLL数据库。
在一种实现方式中,所述权限管理模块用于建立所述DLL文件的用户权限管理表,具体包括:
当检测到用户表中增加用户ID时,获取增加的用户能够访问的DLL文件;根据用户能够访问的DLL文件在所述用户权限管理表中添加权限管理记录;其中,每一所述权限管理记录表征一个用户ID能够访问的DLL文件路径。
在一种实现方式中,所述文件下载模块用于根据本次登录的用户权限下载权限DLL文件至预设位置,具体包括:
根据本次登录所述DLL数据库的用户ID与所述用户权限管理表进行关联,获取本次登录的用户能够访问的DLL文件路径;
在第一插件中输入所述能够访问的DLL文件路径以使所述第一插件将所述权限DLL文件下载至所述目标程序指定的预设位置。
在一种实现方式中,所述资源处理模块用于根据所述权限DLL文件读取资源字典并添加至目标程序,具体包括:
根据第一组件执行所述权限DLL文件以读取资源字典;
根据所述资源字典实例化对应的ResourceDictionary对象;
将所述资源字典的核心属性赋值给所述ResourceDictionary对象的Source属性;
将赋值后的所述ResourceDictionary对象添加至Resources.MergedDictionaries集合以使所述资源字典添加至所述目标程序。
第三方面,本申请还提供一种终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的WPF资源加载方法。
第四方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上所述的WPF资源加载方法。
附图说明
图1是本发明实施例提供的一种WPF资源加载方法的流程示意图;
图2是本发明实施例提供的一种WPF资源加载装置的模块结构图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本申请的说明书和权利要求书及所述附图中的术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
首先,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)CIL:通用中间语言(Common Intermediate Language,简称CIL)(亦被称作MSIL或IL)是一种属于通用语言架构和 .NET 框架的低阶(lowest-level)的人类可读的编程语言。目标为 .NET 框架的语言被编译成CIL,然后汇编成字节码。CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的。它运行在虚拟机上,其主要支持的语言有C#、Visual Basic .NET、C++/CLI以及 J#(集成这些语言向CIL的编译功能)。
(2)JIT编译器: Just-In-Time Compiler,中文意思是即时编译器。用于把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。字节码是可以发送给任何平台并且能在任意平台上运行的独立于平台的代码。
(3)CLR: (Common Language Runtime) 又称公共语言运行库,和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境。
(4)DLL:是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。一个应用程序可以有多个DLL文件,动态链接库中虽然包含了可执行代码却不能单独执行,而应由应用程序直接或间接调用。实施例1
参见图1,图1是本发明实施例提供的一种WPF资源加载方法的流程示意图。本发明实施例提供一种WPF资源加载方法,包括步骤101至步骤104,各项步骤具体如下:
步骤101:将WPF资源代码编译为DLL文件并建立DLL数据库;
步骤102:建立所述DLL文件的用户权限管理表;其中,所述用户权限管理表用于表征用户权限内能够访问的DLL文件路径;
步骤103:根据本次登录的用户权限下载权限DLL文件至预设位置;
步骤104:根据所述权限DLL文件读取资源字典并添加至目标程序。
一实施例中,所述将WPF资源代码编译为DLL文件并建立DLL数据库,具体包括:将所述WPF资源代码编译为通用中间语言;根据预设编译器将所述通用中间语言编译为本地逻辑脚本;在预设代码管理器上运行所述本地逻辑脚本,生成DLL文件;将所述DLL文件上传至预设服务器,建立DLL数据库。优选的,将WPF的样式或动态资源的代码编译为CIL的汇编语言,即通用中间语言,实现托管代码,并存在在程序集中。通过JIT即时编译器将通用中间语言编译为本地逻辑脚本,并在托管的CLR(公共语言运行库)下运行本地逻辑脚本,即本地代码,以生成DLL数据库。
一实施例中,所述建立所述DLL文件的用户权限管理表,具体包括:当检测到用户表中增加用户ID时,获取增加的用户能够访问的DLL文件;根据用户能够访问的DLL文件在所述用户权限管理表中添加权限管理记录;其中,每一所述权限管理记录表征一个用户ID能够访问的DLL文件路径。用户表用于用户登录DLL数据库时查看用户信息。用户ID则是用户登录DDL数据库时使用的ID账号。当用户表内增加了用户ID时,可以认为增加了允许登录数据库的用户。优选的,增加了用户ID,此ID对应的用户为张三,获取此时张三能够访问的资源有缩放功能的按钮或文本框。则由管理员根据张三能访问的资源在资源配置页面中添加用户张三能够访问的资源,最后由后台根据添加的用户ID和资源路径(即DLL文件路径)一起添加到用户资源配置表,即用户权限管理表中,每条权限管理记录对应着一个用户能够访问的DLL文件路径。
一实施例中,所述根据本次登录的用户权限下载权限DLL文件至预设位置,具体包括:根据本次登录所述DLL数据库的用户ID与所述用户权限管理表进行关联,获取本次登录的用户能够访问的DLL文件路径;在第一插件中输入所述能够访问的DLL文件路径以使所述第一插件将所述权限DLL文件下载至所述目标程序指定的预设位置。优选的,作为本发明实施例的一个优选方案,还包括,将本次登录所述DLL数据库的用户ID输入至所述用户表进行遍历查询;当检测到所述用户表内存在所述用户ID时将所述用户ID与所述用户权限管理表进行关联。通过对本次登陆的用户ID与DLL数据库的用户表进行遍历查询,可判断用户表中是否存在该用户的访问权,只有当用户表中存在该用户ID时才需要将该用户ID与用户权限管理表进行关联,可避免因不明身份的用户登录数据库带来的数据泄露风险。当用户表中存在本次登录DLL数据库的用户ID时,将该用户ID与用户权限管理表进行关联,获取该用户权限内需要加载到目标程序的DLL文件的路径集合。在第一插件HttpContext.Current.Response中输入需要下载的DLL文件路径,可以实现在服务器上直接下载需要的DLL文件,即用户的权限DLL文件。作为本发明实施例的又一优选方案,当检测到所述用户表中的用户ID对应的用户权限产生变更时,对所述用户权限管理表中的权限管理记录对应进行更新。以确保用户可以在准确的权限范围内访问数据库内的DLL文件,同时对用户的权限进行精准把控,对资源库中的文件进行有效保护,避免较高机密级别的文件被所有用户访问,提高数据库的信息保密程度。
一实施例中,所述根据所述权限DLL文件读取资源字典并添加至目标程序,具体包括:根据第一组件执行所述权限DLL文件以读取资源字典;根据所述资源字典实例化对应的ResourceDictionary对象;将所述资源字典的核心属性赋值给所述ResourceDictionary对象的Source属性;将赋值后的所述ResourceDictionary对象添加至Resources.MergedDictionaries集合以使所述资源字典添加至所述目标程序。优选的,将用户的权限DLL文件下载到预设位置后,通过第一组件System.Reflection.Assembly.UnsafeLoadFrom执行下载的DLL文件,System.Reflection.Assembly.UnsafeLoadFrom组件可以通过组件内部的拼接汇集形成编译成DLL文件前的代码内的资源字典。在获取资源字典后,App.xaml.cs文件中通过获取的资源字典个数实例化出对应个数的ResourceDictionary对象,再将资源字典的Key赋值给ResourceDictionary的Source属性。在WPF应用程序中资源字典有一个核心的属性 Key,Key相对于用户id 具有唯一标识的意思。在设计样式时必须设置Key值以表示控件需要用到该资源。在获取该资源字典时可以连同这个Key值一起获取,只需将资源字典的Key值赋值给 ResourceDictionary的Source属性就能加载资源字典对应的样式。进一步的,将赋值后的ResourceDictionary添加到Resources.MergedDictionaries集合中, 以实现将DLL文件反射出需要的资源字典静态加载到目标程序的设计中,可以避免不必要的动态资源引用,以减少性能消耗和内存占用。
作为本发明实施例的一个优选方案,将资源字典加载到目标程序中后,在WPF的界面或控件中,可以通过 APP.FindResource方法查找对应的样式或动画加载到页面中。FindResource()函数可以确定指定模块中指定类型和名称的资源所在位置。用户通过使用FindResource函数去查找对应样式或动画的资源,从而加载到页面中。
本发明实施例中,还提供了一种WPF资源加载设备,包括处理器、存储器以及存储在存储器中且被配置为由处理器执行的计算机程序,处理器执行计算机程序时实现上述的WPF资源加载方法。
本发明实施例中,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的计算机程序,其中,在计算机程序运行时控制计算机可读存储介质所在设备执行上述的WPF资源加载。
示例性的,所述计算机程序可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在WPF资源加载设备中的执行过程。
所述WPF资源加载设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述WPF资源加载设备可包括,但不仅限于,处理器、存储器、显示器。本领域技术人员可以理解,上述部件仅仅是WPF资源加载设备的示例,并不构成对WPF资源加载设备的限定,可以包括比所述部件更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述WPF资源加载设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述WPF资源加载设备的控制中心,利用各种接口和线路连接整个所述WPF资源加载设备的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述WPF资源加载设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、文字转换功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、文字消息数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
其中,所述WPF资源加载设备集成的模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一个计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
区别于现有技术中将所有WPF资源都加载到本地内存中,本发明实施例提供一种WPF资源加载方法,预先将WPF资源代码编译为DLL文件并建立DLL数据库,即动态链接库。在保证实现对所述WPF资源的调用的同时无需将WPF的资源代码全部加载至本地内存,从而减少内存的占用以及系统的性能消耗。进一步的,建立DLL文件的用户权限管理表,获取每个登录DLL数据库的用户能够访问的DLL文件路径,以实现对用户访问权限管理和DLL文件的数据保护,用户在被允许的权限范围内可以将DLL文件下载至于预设位置,按需下载,进一步减少对不需要的冗余资源的下载,减少本地内存的占用,且还可以避免不明身份的用户访问数据库产生的数据安全隐患。用户在范围内的DLL文件下载至预设位置后可通过DLL文件读取需要的资源字典并添加至目标应用程序中,以实现对WPF资源的加载应用。
实施例2
参见图2,图2是本发明实施例提供的一种WPF资源加载装置的模块结构图。本发明实施例提供一种WPF资源加载装置,包括数据处理模块201、权限管理模块202、文件下载模块203和资源处理模块204,具体为:
所述数据处理模块201用于将WPF资源代码编译为DLL文件并建立DLL数据库;
所述权限管理模块202用于建立所述DLL文件的用户权限管理表;其中,所述用户权限管理表用于表征用户权限内能够访问的DLL文件路径;
所述文件下载模块203用于根据本次登录的用户权限下载权限DLL文件至预设位置;
所述资源处理模块204用于根据所述权限DLL文件读取资源字典并添加至目标程序。
一实施例中,所述数据处理模块201用于将WPF资源代码编译为DLL文件并建立DLL数据库,具体包括:将所述WPF资源代码编译为通用中间语言;根据预设编译器将所述通用中间语言编译为本地逻辑脚本;在预设代码管理器上运行所述本地逻辑脚本,生成DLL文件;将所述DLL文件上传至预设服务器,建立DLL数据库。
一实施例中,所述权限管理模块202用于建立所述DLL文件的用户权限管理表,具体包括:当检测到用户表中增加用户ID时,获取增加的用户能够访问的DLL文件;根据用户能够访问的DLL文件在所述用户权限管理表中添加权限管理记录;其中,每一所述权限管理记录表征一个用户ID能够访问的DLL文件路径。
一实施例中,所述文件下载模块203用于根据本次登录的用户权限下载权限DLL文件至预设位置,具体包括:根据本次登录所述DLL数据库的用户ID与所述用户权限管理表进行关联,获取本次登录的用户能够访问的DLL文件路径;在第一插件中输入所述能够访问的DLL文件路径以使所述第一插件将所述权限DLL文件下载至所述目标程序指定的预设位置。
一实施例中,所述资源处理模块204用于根据所述权限DLL文件读取资源字典并添加至目标程序,具体包括:根据第一组件执行所述权限DLL文件以读取资源字典;根据所述资源字典实例化对应的ResourceDictionary对象;将所述资源字典的核心属性赋值给所述ResourceDictionary对象的Source属性;将赋值后的所述ResourceDictionary对象添加至Resources. MergedDictionaries集合以使所述资源字典添加至所述目标程序。
所属领域的技术人员可以清楚的了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不在赘述。
区别于现有技术中将所有WPF资源都加载到本地内存中,本发明实施例提供一种WPF资源加载装置,通过数据处理模块预先将WPF资源代码编译为DLL文件并建立DLL数据库,即动态链接库。在保证实现对所述WPF资源的调用的同时无需将WPF的资源代码全部加载至本地内存,从而减少内存的占用以及系统的性能消耗。进一步的,建立DLL文件的用户权限管理表,获取每个登录DLL数据库的用户能够访问的DLL文件路径,以实现对用户访问权限管理和DLL文件的数据保护,用户在被允许的权限范围内可以将DLL文件下载至于预设位置,按需下载,进一步减少对不需要的冗余资源的下载,减少本地内存的占用,同时避免不明身份的用户访问数据库产生的数据安全隐患。用户在范围内的DLL文件下载至预设位置后可通过DLL文件读取需要的资源字典并添加至目标应用程序中,以实现对WPF资源的加载应用。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和替换,这些改进和替换也应视为本发明的保护范围。
Claims (10)
1.一种WPF资源加载方法,其特征在于,包括:
将WPF资源代码编译为DLL文件并建立DLL数据库;
建立所述DLL文件的用户权限管理表;其中,所述用户权限管理表用于表征用户权限内能够访问的DLL文件路径;
根据本次登录的用户权限下载权限DLL文件至预设位置;
根据所述权限DLL文件读取资源字典并添加至目标程序。
2.如权利要求1所述的一种WPF资源加载方法,其特征在于,所述将WPF资源代码编译为DLL文件并建立DLL数据库,具体包括:
将所述WPF资源代码编译为通用中间语言;
根据预设编译器将所述通用中间语言编译为本地逻辑脚本;
在预设代码管理器上运行所述本地逻辑脚本,生成DLL文件;
将所述DLL文件上传至预设服务器,建立DLL数据库。
3.如权利要求1所述的一种WPF资源加载方法,其特征在于,所述建立所述DLL文件的用户权限管理表,具体包括:
当检测到用户表中增加用户ID时,获取增加的用户能够访问的DLL文件;根据用户能够访问的DLL文件在所述用户权限管理表中添加权限管理记录;其中,每一所述权限管理记录表征一个用户ID能够访问的DLL文件路径。
4.如权利要求1所述的一种WPF资源加载方法,其特征在于,所述根据本次登录的用户权限下载权限DLL文件至预设位置,具体包括:
根据本次登录所述DLL数据库的用户ID与所述用户权限管理表进行关联,获取本次登录的用户能够访问的DLL文件路径;
在第一插件中输入所述能够访问的DLL文件路径以使所述第一插件将所述权限DLL文件下载至所述目标程序指定的预设位置。
5.如权利要求1所述的一种WPF资源加载方法,其特征在于,所述根据所述权限DLL文件读取资源字典并添加至目标程序,具体包括:
根据第一组件执行所述权限DLL文件以读取资源字典;
根据所述资源字典实例化对应的ResourceDictionary对象;
将所述资源字典的核心属性赋值给所述ResourceDictionary对象的Source属性;
将赋值后的所述ResourceDictionary对象添加至Resources.MergedDictionaries集合以使所述资源字典添加至所述目标程序。
6.一种WPF资源加载装置,其特征在于,包括数据处理模块、权限管理模块、文件下载模块和资源处理模块,具体为:
所述数据处理模块用于将WPF资源代码编译为DLL文件并建立DLL数据库;
所述权限管理模块用于建立所述DLL文件的用户权限管理表;其中,所述用户权限管理表用于表征用户权限内能够访问的DLL文件路径;
所述文件下载模块用于根据本次登录的用户权限下载权限DLL文件至预设位置;
所述资源处理模块用于根据所述权限DLL文件读取资源字典并添加至目标程序。
7.如权利要求6所述的一种WPF资源加载装置,其特征在于,所述数据处理模块用于将WPF资源代码编译为DLL文件并建立DLL数据库,具体包括:
将所述WPF资源代码编译为通用中间语言;
根据预设编译器将所述通用中间语言编译为本地逻辑脚本;
在预设代码管理器上运行所述本地逻辑脚本,生成DLL文件;
将所述DLL文件上传至预设服务器,建立DLL数据库。
8.如权利要求6所述的一种WPF资源加载装置,其特征在于,所述权限管理模块用于建立所述DLL文件的用户权限管理表,具体包括:
当检测到用户表中增加用户ID时,获取增加的用户能够访问的DLL文件;根据用户能够访问的DLL文件在所述用户权限管理表中添加权限管理记录;其中,每一所述权限管理记录表征一个用户ID能够访问的DLL文件路径。
9.一种终端设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至5任意一项所述的WPF资源加载方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如权利要求1至5中任意一项所述的WPF资源加载方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211194773.9A CN115269058B (zh) | 2022-09-29 | 2022-09-29 | 一种wpf资源加载方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211194773.9A CN115269058B (zh) | 2022-09-29 | 2022-09-29 | 一种wpf资源加载方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115269058A true CN115269058A (zh) | 2022-11-01 |
CN115269058B CN115269058B (zh) | 2023-01-24 |
Family
ID=83756154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211194773.9A Active CN115269058B (zh) | 2022-09-29 | 2022-09-29 | 一种wpf资源加载方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115269058B (zh) |
Citations (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1782941A (zh) * | 2004-12-04 | 2006-06-07 | 鸿富锦精密工业(深圳)有限公司 | 软件授权与保护装置及方法 |
US20080196018A1 (en) * | 2007-02-08 | 2008-08-14 | Identitymine Inc. | SimpleBinding Extension |
US20090172657A1 (en) * | 2007-12-28 | 2009-07-02 | Nokia, Inc. | System, Method, Apparatus, Mobile Terminal and Computer Program Product for Providing Secure Mixed-Language Components to a System Dynamically |
US20090259951A1 (en) * | 2008-04-15 | 2009-10-15 | Microsoft Corporation | Light-weight managed composite control hosting |
CN102520935A (zh) * | 2011-11-29 | 2012-06-27 | 曙光信息产业(北京)有限公司 | 一种用于快速开发用户界面的方法 |
CN102594815A (zh) * | 2012-02-14 | 2012-07-18 | 北京鼎普科技股份有限公司 | 登陆操作系统前设置用户权限并执行相应操作的方法、装置 |
CN103034490A (zh) * | 2012-12-05 | 2013-04-10 | 上海创图网络科技发展有限公司 | 一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法 |
CN103460217A (zh) * | 2011-01-14 | 2013-12-18 | 威步系统股份公司 | 用于保护应用程序和相关计算机程序产品的方法 |
CN103996000A (zh) * | 2014-05-16 | 2014-08-20 | 深圳市东信时代信息技术有限公司 | 权限管理系统及方法 |
US20150074634A1 (en) * | 2013-09-06 | 2015-03-12 | Unisys Corporation | Business suite framework for developing software applications |
US20180239622A1 (en) * | 2017-02-20 | 2018-08-23 | Gebauer Gmbh | System and method for generating a dynamic runtime-modifiable user interface |
CN108595167A (zh) * | 2018-03-16 | 2018-09-28 | 深圳极智联合科技股份有限公司 | 一种基于SQL Server的程序管理方法和系统 |
CN109947426A (zh) * | 2019-03-12 | 2019-06-28 | 天津字节跳动科技有限公司 | 应用程序的生成方法、装置及电子设备 |
US20190294422A1 (en) * | 2018-03-22 | 2019-09-26 | Sick Ag | Method of Carrying Out Modifications to a Software Application |
CN111506244A (zh) * | 2020-04-24 | 2020-08-07 | 东莞市精驰软件有限公司 | 控件拖拽显示方法、系统、智能终端及存储介质 |
CN113064591A (zh) * | 2021-02-22 | 2021-07-02 | 福建星云电子股份有限公司 | 一种wpf页面动态生成方法、系统、设备及介质 |
CN113204598A (zh) * | 2021-05-28 | 2021-08-03 | 平安科技(深圳)有限公司 | 一种数据同步方法、系统及存储介质 |
CN113312238A (zh) * | 2021-06-07 | 2021-08-27 | 中国建设银行股份有限公司 | 一种资源池监控方法及其相关设备 |
CN113590123A (zh) * | 2021-08-09 | 2021-11-02 | 深圳软牛科技有限公司 | Wpf界面切换方法、装置、计算机设备及存储介质 |
-
2022
- 2022-09-29 CN CN202211194773.9A patent/CN115269058B/zh active Active
Patent Citations (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1782941A (zh) * | 2004-12-04 | 2006-06-07 | 鸿富锦精密工业(深圳)有限公司 | 软件授权与保护装置及方法 |
US20080196018A1 (en) * | 2007-02-08 | 2008-08-14 | Identitymine Inc. | SimpleBinding Extension |
US20090172657A1 (en) * | 2007-12-28 | 2009-07-02 | Nokia, Inc. | System, Method, Apparatus, Mobile Terminal and Computer Program Product for Providing Secure Mixed-Language Components to a System Dynamically |
US20090259951A1 (en) * | 2008-04-15 | 2009-10-15 | Microsoft Corporation | Light-weight managed composite control hosting |
CN103460217A (zh) * | 2011-01-14 | 2013-12-18 | 威步系统股份公司 | 用于保护应用程序和相关计算机程序产品的方法 |
CN102520935A (zh) * | 2011-11-29 | 2012-06-27 | 曙光信息产业(北京)有限公司 | 一种用于快速开发用户界面的方法 |
CN102594815A (zh) * | 2012-02-14 | 2012-07-18 | 北京鼎普科技股份有限公司 | 登陆操作系统前设置用户权限并执行相应操作的方法、装置 |
CN103034490A (zh) * | 2012-12-05 | 2013-04-10 | 上海创图网络科技发展有限公司 | 一种基于Managed C实现WPF窗体与GDI窗体消息互操作的方法 |
US20150074634A1 (en) * | 2013-09-06 | 2015-03-12 | Unisys Corporation | Business suite framework for developing software applications |
CN103996000A (zh) * | 2014-05-16 | 2014-08-20 | 深圳市东信时代信息技术有限公司 | 权限管理系统及方法 |
US20180239622A1 (en) * | 2017-02-20 | 2018-08-23 | Gebauer Gmbh | System and method for generating a dynamic runtime-modifiable user interface |
CN108595167A (zh) * | 2018-03-16 | 2018-09-28 | 深圳极智联合科技股份有限公司 | 一种基于SQL Server的程序管理方法和系统 |
US20190294422A1 (en) * | 2018-03-22 | 2019-09-26 | Sick Ag | Method of Carrying Out Modifications to a Software Application |
CN109947426A (zh) * | 2019-03-12 | 2019-06-28 | 天津字节跳动科技有限公司 | 应用程序的生成方法、装置及电子设备 |
CN111506244A (zh) * | 2020-04-24 | 2020-08-07 | 东莞市精驰软件有限公司 | 控件拖拽显示方法、系统、智能终端及存储介质 |
CN113064591A (zh) * | 2021-02-22 | 2021-07-02 | 福建星云电子股份有限公司 | 一种wpf页面动态生成方法、系统、设备及介质 |
CN113204598A (zh) * | 2021-05-28 | 2021-08-03 | 平安科技(深圳)有限公司 | 一种数据同步方法、系统及存储介质 |
CN113312238A (zh) * | 2021-06-07 | 2021-08-27 | 中国建设银行股份有限公司 | 一种资源池监控方法及其相关设备 |
CN113590123A (zh) * | 2021-08-09 | 2021-11-02 | 深圳软牛科技有限公司 | Wpf界面切换方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
西飘客: "WPF创建一个资源字典dll工程-资源共享", 《HTTPS://BLOG.CSDN.NET/TECHNOLOGYLEADER/ARTICLE/DETAILS/121639778》 * |
Also Published As
Publication number | Publication date |
---|---|
CN115269058B (zh) | 2023-01-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190310834A1 (en) | Determining based on static compiler analysis that execution of compiler code would result in unacceptable program behavior | |
US6944846B2 (en) | Algorithm for localization of a JAVA application using reflection API and a custom class loader | |
WO2017050094A1 (zh) | 加载应用程序的方法及装置 | |
CN108984174B (zh) | 跨平台的应用创建方法、装置、服务器和存储介质 | |
EP3035191B1 (en) | Identifying source code used to build executable files | |
Carter et al. | Curiousdroid: automated user interface interaction for android application analysis sandboxes | |
US11625253B2 (en) | Application-level runtime environment for executing applications native to mobile devices without full installation | |
EP3147783A1 (en) | Automatic determination of compiler configuration | |
CN112052006B (zh) | 一种软件代码编译方法及系统 | |
US8200938B2 (en) | Computer system and method providing a memory buffer for use with native and platform-independent software code | |
US9513762B1 (en) | Static content updates | |
CN108351766B (zh) | 从移动设备创建和修改应用 | |
US5838911A (en) | Method and apparatus for obtaining network information by using a dynamic link library | |
US7213098B2 (en) | Computer system and method providing a memory buffer for use with native and platform-independent software code | |
EP3147781A1 (en) | Wrapper calls identification | |
KR101557455B1 (ko) | 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법 | |
CN114398673A (zh) | 应用程序的合规检测方法、装置、存储介质与电子设备 | |
CN111913741B (zh) | 对象拦截方法、装置、介质及电子设备 | |
CN110597496B (zh) | 应用程序的字节码文件获取方法及装置 | |
CN115269058B (zh) | 一种wpf资源加载方法及装置 | |
CN110941443A (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
Zhan et al. | Splitting third-party libraries’ privileges from android apps | |
CN114911541A (zh) | 配置信息的处理方法、装置、电子设备及存储介质 | |
Deitel et al. | Java SE 8 for programmers | |
CN111090425A (zh) | 一种程序封装方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: No. 56 Nanli East Road, Shiqi Town, Panyu District, Guangzhou City, Guangdong Province, 510000 Patentee after: Guangdong Baolun Electronics Co.,Ltd. Address before: No.19 Chuangyuan Road, Zhongcun street, Panyu District, Guangzhou, Guangdong 510000 Patentee before: GUANGZHOU ITC ELECTRONIC TECHNOLOGY Co.,Ltd. |