GVKun编程网logo

Vista上多用户WinForms应用程序的规则(windows server 2019多用户)

29

在本文中,您将会了解到关于Vista上多用户WinForms应用程序的规则的新资讯,同时我们还将为您解释windowsserver2019多用户的相关在本文中,我们将带你探索Vista上多用户WinF

在本文中,您将会了解到关于Vista上多用户WinForms应用程序的规则的新资讯,同时我们还将为您解释windows server 2019多用户的相关在本文中,我们将带你探索Vista上多用户WinForms应用程序的规则的奥秘,分析windows server 2019多用户的特点,并给出一些关于.NET WinForms应用程序的MVC / MVP框架、.net – winforms应用程序中的查询设计器、C# CefSharp如何在Winforms应用程序中使用、c# – DoDragDrop有时会冻结WinForms应用程序的实用技巧。

本文目录一览:

Vista上多用户WinForms应用程序的规则(windows server 2019多用户)

Vista上多用户WinForms应用程序的规则(windows server 2019多用户)

我们有一个适用于Windows XP的.Net WinForms应用程序的MSI安装程序,只能以pipe理员身份进行安装和运行。 用户在运行时必须login到应用程序。 客户希望它在Vista下的用户帐户下安装和运行,并使用他们的Windows帐户。

通过代码的初步查看显示了很多问题; 安装程序将写入registry并将应用程序安装在C: Program Files文件中。 应用程序将用户首选项存储在registry中,将数据写入C: Documents and Settings All Users ,然后在C:中创build临时文件。

我想首先要做的是将数据文件存储在System.Environment.CommonApplicationData和System.Environment.LocalApplicationData中的用户首选项。 用户帐户可以安装一个应用程序到System.Environment.ProgramFiles?

一个问题是,应用程序必须是可安装和可以由任何用户卸载,并且所有用户共享相同的数据文件。 每个用户都有自己的喜好。

向后兼容WPF应用程序创build使用点networking框架4.5

在.NET中写入日志 – 权限问题

找不到方法:'Void System.Diagnostics.Tracing.FrameworkEventSource.BeginGetResponse(System.Object,System.String)'

快速(低级)方法recursion处理文件夹中的文件

WPF RibbonWindow + Ribbon =标题外屏?

有没有一本书或网站,详细分解了构buildWinForms应用程序所需的内容,该应用程序遵循Vista上多个用户的规则?

编辑:我检查了客户端,并要求安装只是作为一个用户帐户是坚定的,他们正在删除pipe理员访问楼层的工作人员。 这排除了pipe理员安装的组件和每台机器的安装。

我正在考虑创build一个独立的数据应用程序,这个应用程序可以在一台pipe理机器上运行,而这台机器将通过远程连接连接到该机器 所有客户端数据将被存储在这台机器上。 但是,这个应用程序也将不得不安装并运行在用户帐户下。

有没有描述Vista用户应用程序必须遵循的所有规则的书籍或网站?

Windows 7将如何编程? .NET仍然是国王?

删除C#中的文本文件的第一行

Windows句柄如果控件设置为可见= false(.NET)

KERNELBASE.dllexception0xe0434352偏移量0x000000000000a49d

得到所有打开的窗口的标题

“该应用程序必须是可由任何用户安装和卸载的”“所有用户共享相同的数据文件”

要满足这两个要求,你将遇到麻烦。 Vista的新安全功能旨在防止用户相互(和在系统上)践踏。

关于使我能想到的唯一方法就是像我们在Windows 2000环境中处理类似的需求。 您构建了两个组件 – 应用程序的用户部分和管理用户之间共享信息的系统组件。 管理员安装“共享”组件(其中包括一个Windows服务来运行它),每个用户安装“用户”组件。

我认为这可能适用于您的场景,但是需要重新使用共享文件的代码与服务对话,而不是直接访问这些文件。

当然,你也可以只有一个用户以管理员身份运行的工具,在特定位置创建文件夹并授予所需的安全权限。 这可能也适用于你的目的。

您将遇到问题,允许任何用户安装该应用程序,同时访问共享的数据文件。 这是因为你的第一个需求意味着每个用户的安装,而第二个意味着每个机器的安装。 让我解释 …

标准(基于MSI的)安装程序的范围可以是每个用户或每台机器:

每用户安装将安装的程序文件放在用户主目录下的某个位置。 该应用程序仅为该用户安装。 其他用户甚至在开始菜单和添加/删除程序中都看不到该程序。 如果他们想要这个程序,他们必须自己安装到他们自己的用户区域。 所以可能会有多个安装的程序副本,每一个都与其他人隔离。 这种类型的安装可以由普通(非管理员)用户执行,这就是为什么他们不能写入“程序文件”或“所有用户”等共享区域。

每台机器安装可以修改文件系统的共享区域(即“程序文件”或“所有用户”)。 每个用户在“开始”菜单和“添加/删除程序”中看到相同的程序副本。 只有管​​理员用户可以执行这种类型的安装。

多谢你们。 我与客户进行了检查,并且只需要以用户帐户安装的要求是坚定的,他们正在从地板工作人员删除管理员访问。 这排除了管理员安装的组件和每台机器的安装。

我们的解决方案是为我们的应用创建一个新的标准用户帐户。 需要使用应用程序的工作人员必须以该用户身份登录。 实际上这比在用户之间共享数据更好,因为现在我们可以在同一台机器上为不同的客户端托管应用程序。

我还发现了在Windows上制作多用户应用程序,Microsoft Windows 7客户端软件徽标技术要求文档的很好的参考。

.NET WinForms应用程序的MVC / MVP框架

.NET WinForms应用程序的MVC / MVP框架

有没有人知道企业WinForms应用程序可用的MVC / MVP框架?

之前有用户界面进程应用程序块的.NET 。 但是,自从Windows Workflow Foundation发布以来,它就不再处于开发阶段(.NET 4.0也将完全重写)。

也许我不是最新的,但在我看来,目前还有差距。

基于服务的数据库

C# – 如何使用TaskSchedular类列出特定用户的计划任务

从loginID获取用户SID(Windows XP和更高版本)

C# – 未处理的exception – path中的非法字符

.net FileSystemWatcher不拾取移动的文件夹

如何删除文件关联

如何恢复/降级Windows Phone 8.1应用程序到C#5,我不小心升级到C#6

从PowerShell挂起或hibernate

信任自签名证书来validation服务器(Windows上的.NET客户端)

发布版本包含额外的文件,我需要这些?

Microsoft拥有用于WinForms应用程序的复合应用程序块(CAB)。 虽然在技术上不是MVC / MVP实现,但它确实在UI代码和非UI代码之间提供了很好的分离: http : //msdn.microsoft.com/zh-cn/library/aa480450.aspx

只要你对相关模式感到满意,也可以自己做,而不使用任何框架。 在采用这种方法时,Jeremy Miller就一些最佳实践提供了一系列优秀的文章:

建立你自己的CAB Part#1 – 序言

建立你自己的CAB Part#2 – 低调的对话框

建立自己的CAB第3部分 – 监督控制器模式

建立你自己的CAB第四部分 – 被动观点

建立自己的CAB第五部分 – 演示模型

构建您自己的CAB第6部分 – 查看演示者通信

建立自己的CAB – 回答一些问题

建立自己的CAB第七部分 – 模型是什么?

构建您自己的CAB第8部分 – 在模型视图中分配责任Presenter体系结构

构建您自己的CAB Part#9 – 使用通知模式进行以域为核心的验证

构建您自己的CAB第10部分 – 使用NUnitForms测试UI

构建您自己的CAB Part#11 – Event Aggregator

建立自己的CAB第12部分 – 用“闩锁”

建立你自己的CAB第13部分 – 带有一些DSL的嵌入式控制器

你有没有尝试过MVC# ? 我开始使用它,但是项目却一路倒退,所以我不能保证它太多 – 对不起!

编辑:我刚刚发现这篇文章,看起来不错。

我们使用MS的智能客户端软件工厂。 它提供了IDE集成,完整的MVC支持,一旦你了解了它背后的概念,它是一个非常有能力的实现。 您可以从http://msdn.microsoft.com/en-us/library/aa480482.aspx获取它

智能客户端软件工厂?

我一直都是自己动手的 – 这并不难,而且我越是控制我的代码库就越好。

我只是想知道一个MVC框架如何适应CastleWindsor之类的?

这可能不是最有用的答案,但只是想知道你是否已经考虑过这个选项!

最后,我不喜欢Prism,CAB或SmartClient太复杂,最终推出我自己的实现。

随着时间的推移,一些常见的模式正在出现。 这些从应用程序重用到应用程序。 这里是一个例子: 在Windows.Forms与MVC的DDD和规则驱动的UI验证 。

我正在插入我自己的框架: TrueView for .NET 。 它基于DDD和裸体对象模式。

至少,使用它来创建快速原型是从您的业务用户获得体面的反馈的好方法。

所有这些标准框架都不适合大型复杂的应用程序开发,他们认为显示器是静态的。 我自己也开发了自己的,因为屏幕控件必须是动态的,即使MVC / MVP模式都假设显示是静态的,所以当控件中的字段取决于用户的角色MVC / MVP模式不适合。 我已经开发了一个工具,可以将业务对象及其属性加载到数据库中,然后用户只需选择想要显示的对象和对象属性即可构建屏幕,控件可以由任意数量的控件组,每个控制组都可以包含任何业务对象属性,业务对象是由我的Linq ORM的视图生成的。 因此控件将只显示用户有权访问的控件组的字段。 你也可以使用面向方面的编程来为MVC模式提供一些宏,但是当显示必须基于角色动态的时候,这个开销可能会增加复杂性和性能成本。

和TrueView一样,还有Naked Objects for .NET 。 这支持客户端/服务器模式,并且当前正在移植web查看器(基于Java等效查看器)。

至于哪些属性/动作可用于给定的用户/角色,这是在裸体对象中动态完成的。 支持三种业务规则前提条件:1.成员是否可见? 2.会员可用吗? 3.对会员的更改(新的属性值或操作参数)是否有效? 或者更有说服力的:你能看到吗? 你可以用它吗? 你可以做到吗? 裸体对象编程模型可以通过声明和命令来指定这些规则。

即使你最终将自己的域模型包装在自己的UI层,我建议你看看NO。

干杯

丹海伍德

我已经成功地使用了以下开源项目来实现ASP.NET + WinForms + C#中的MVP模式:

城堡项目。

看看我的博客文章,其中显示了一个完整的ASP.NET Web应用程序示例:

在ASP.NET中使用Castle模型查看Presenter模式

.net – winforms应用程序中的查询设计器

.net – winforms应用程序中的查询设计器

我正在为一个客户端的 Winforms C#应用程序工作,取代了他们旧的基于MS Access的解决方案.这是一个完整的重写,现在使用sql Server作为其数据库.该软件现在处于开发的最后阶段.

他们刚刚要求的一件事就是能够自定义查询软件的用户界面可能不会让他们在需要的时候做.

使用他们旧的Access解决方案,他们可以使用查询设计器创建自己的自定义查询.使用winforms / sql Server解决方案,他们无法做到这一点.他们也不想自己写sql.

任何人都可以想到一个很好的解决方案吗?也许是一个Winforms库,它允许用户创建业务对象和“和”或“逻辑的图形.还有一些其他类型的UI,允许他们自定义查询,就像他们在Access中可能做的一样(但也许更具体的域).

更新

我把Yaqub的答案标记为答案,因为这最接近我当时正在寻找的东西.最后我写了一个自定义表单来生成他们的查询:

第二组中的“选择表…”组合框仅显示已添加到顶部列表框的表.

因为数据库布局现在已经很多了,所以我已经编写了代码来智能地计算所需的连接.例如,如果它们在顶部组中添加两个间接相关的表,那么当它生成sql时,它将添加任何所需的连接来关联它们.如果数据库布局确实发生变化,我已经很容易地在查询编辑器的代码中更改FK引用.

对于条件组,值控制(该组中的第4个控制)根据字段类型(文本框,数字上/下控制,日期戳,复选框)而变化.

当他们点击“运行查询”时,他们获得另一个窗体,其中显示结果的gridview.在该结果表单中,它们可以导出到制表符分隔的文件.

我给了他们第一个版本,到目前为止它们似乎很开心.

我不想去访问路由,因为这个新版本的软件的全部内容是将它们从Access中移开(而不是全部,因为还有更多的功能).这似乎是一个巨大的回报,以保持与Access的依赖.这也意味着如果他们在Access中保存大量自定义查询,并且我更改了数据库模式,我很有可能会打破他们的查询.我不希望他们能够访问数据库.在我看来,这是麻烦的问题.应该触摸数据库的唯一的事情是新的软件,以及我们所做的任何自动数据库备份 – 没有别的,尤其是用户!

在软件中执行的另一个优点是可以对查询结果进行后处理.例如,在.NET代码中编写的软件中运行的数据分析算法很多.所以我可以添加字段到这个接口,让他们选择这些算法的结果.

解决方法

您可能会发现 Visual SQL Query Designer有帮助.它会给你一个想法,如何实现这个功能.

此工具可用于设计SQL查询.与sql Server Management Studio相比,它的UI非常基本.其限制是使用OLEDB连接字符串.您可以从here下载源代码.

编辑:

EasyQuery.NET WinForms可以是一个选项,但它不是免费的.

This article也可以帮你一点.

C# CefSharp如何在Winforms应用程序中使用

C# CefSharp如何在Winforms应用程序中使用

最近做了一个很小的功能,在网页上面打开应用程序,用vs的debug调试,可以正常打开应用程序,可布置到iis上面却无法运行应用程序,吾百度之,说是iis权限问题,吾依理做之,可怎么折腾也不行。最后boss给了两种方案,第一,弃b/s改c/s,第二,用CefSharp把b/s网站嵌进去。b/s网站已做完,弃之可惜,吾便用了CefSharp。

以下是使用CefSharp的步骤:

 1.创建一个基本的Winforms应用程序,并添加CefSharp使用NuGet包。

    在创建之前,请确保计算机已安装:CefSharp 45.0及更高版本需要安装VC 2013 Redistributable Package x86,早期版本需要VC 2012 Redistributable Package x86。如果未安装,会报以下错误。

  An unhandled exception of type ''System.IO.FileNotFoundException'' occurred in browser.exe Additional information: Could not load file or assembly ''CefSharp.Core.dll'' or one of its dependencies.

    通常安装最新版本的CefSharp,建议完全关闭VS,然后重新打开(这样可以确保您的引用显示,并有完整的intellisense),否则你可能会发生错误:找不到类型或命名空间名称“Cefsharp”(是否缺少using指令或程序集引用?)

2 更改平台配置(x86,x64或AnyCPU)

   吾用的CefSharp版本是51以上,所以要修改配置:

   首先,搜索your-project-name.csproj文件,并在第一个 <PropertyGroup>的节点添加:

     <CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>

   然后修改app.config文件:

     <runtime>

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="x86"/>
    </assemblyBinding>
 </runtime>
3 cefsharp已经安装并配置完成,现在就可以写代码了.
  这是winfrom的代码
复制代码
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.Configuration;

namespace VR.Winfrom
{
    public partial class Form1 : Form
    {
        public ChromiumWebBrowser chromeBrowser;

        public Form1()
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;
            InitializeChromium();
            // Register an object in javascript named "cefCustomObject" with function of the CefCustomObject class :3
            chromeBrowser.RegisterJsObject("formProcess", new FormProcess(chromeBrowser, this));
        }

        public void InitializeChromium()
        {
            CefSettings settings = new CefSettings();
            // Initialize cef with the provided settings
            Cef.Initialize(settings);
            // Create a browser component
            string url = ConfigurationManager.AppSettings["Url"];
            chromeBrowser = new ChromiumWebBrowser(url);

            // Add it to the form and fill it to the form window.
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill;

            // Allow the use of local resources in the browser
            BrowserSettings browserSettings = new BrowserSettings();
            browserSettings.FileAccessFromFileUrls = CefState.Enabled;
            browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
            browserSettings.WebSecurity = CefState.Enabled;
            chromeBrowser.BrowserSettings = browserSettings;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
        }
    }
}
复制代码
这是执行应用程序的代码
复制代码
using System.Diagnostics;
using CefSharp.WinForms;
using VR.DAL;
using System;

namespace VR.Winfrom
{
   public class FormProcess
    {
        // Declare a local instance of chromium and the main form in order to execute things from here in the main thread
        private static ChromiumWebBrowser _instanceBrowser = null;
        // The form class needs to be changed according to yours
        private static Form1 _instanceMainForm = null;
        
        public FormProcess(ChromiumWebBrowser originalBrowser, Form1 mainForm)
        {
            _instanceBrowser = originalBrowser;
            _instanceMainForm = mainForm;
        }

        public void opencmd(string filePath)
        {
              
                string file = @"" + filePath;
                ProcessStartInfo start = new ProcessStartInfo(file);
                Process.Start(start);
        }

       
    }
}
复制代码

最后web页面的调用

<button class="btn btn-primary" onclick="FormProcess.opencmd(''C://Program Files (x86)//Google//Chrome//Application//chrome.exe'');">Open</button>

 参考网址:http://www.libs.org.cn/index.php?m=content&c=index&a=show&catid=90&id=129 

 

出处:https://www.cnblogs.com/shimiyan/p/6932073.html

c# – DoDragDrop有时会冻结WinForms应用程序

c# – DoDragDrop有时会冻结WinForms应用程序

我正在做一个Drag Drop到外部应用程序,如下所示:
string[] files = new string[/* */];

// get files

DataObject o = new DataObject(DataFormats.FileDrop,files);
DoDragDrop(o,DragDropEffects.copy | DragDropEffects.Move);

一些应用程序将采取文件并继续处理它们,我的应用程序是免费的,但一些应用程序将使我的应用程序冻结,直到它处理所有文件…有什么办法可以解决这个问题吗?我试图在一个线程中做到这一点但是效果不是很好 – 它根本不起作用…所以,任何建议如何使这个代码不挂我的应用程序?

解决方法

.NET Control.DoDragDrop只是一个叫做Win32 api的wapper ..(等待它).. DoDragDrop

所以它有同样的局限性. DoDragDrop只能从调用OleInitialize的线程调用,这使得线程成为STA(单线程单元)类型线程.

因为它只能由STA线程使用,并且API设计是同步的,所以您可以使用目标应用程序处理丢弃通知.这只是OLE拖放设计的一部分,无法更改. (OLE拖放实际上是在Windows 3x天内设计的,在Windows应用程序中甚至存在线程之前).

所以,你可以让这个工作在另一个线程IFF上,该线程是一个STA线程.您可能还必须使用interop来调用非托管的DoDragDrop函数.

今天关于Vista上多用户WinForms应用程序的规则windows server 2019多用户的讲解已经结束,谢谢您的阅读,如果想了解更多关于.NET WinForms应用程序的MVC / MVP框架、.net – winforms应用程序中的查询设计器、C# CefSharp如何在Winforms应用程序中使用、c# – DoDragDrop有时会冻结WinForms应用程序的相关知识,请在本站搜索。

本文标签: