Tag: c ++

标记MSI,因此必须以提升的管理员帐户运行

我有一个CustomAction作为MSI的一部分。 它必须作为域帐户运行,该帐户也是本地Administrators帐户的成员。 它不能使用NoImpersonate标志将自定义操作作为NT Authority \ System运行,因为它不会访问网络资源。 在启用了UAC的Vista / 2008上,如果NoImpersonate处于关闭状态,则它将作为执行用户运行,但具有非特权令牌,并且无法访问本地资源,例如.installState。 请参阅UAC架构 任何人都知道一种方法 强制MSI使用提升的令牌运行,就像从提升的命令提示符运行一样? 强制CustomAction运行提升(清单中的requireAdministrator似乎不起作用)? 如果UAC已启用且未升级并且是否已警告或取消安装,请确定?

更新实体列表的有效方法

我正在开发一个允许用户编辑实体列表的项目。 我将这些实体映射到视图模型并使用编辑器字段显示它们。 当用户按下提交按钮时,我会浏览每个模型并进行更新,如下所示: foreach (var viewModel in viewModels) { //Find the database model and set the value and update var entity = unit.EntityRepository.GetByID(fieldModel.ID); entity.Value = viewModel.Value; unit.EntityRepository.Update(entity); } 上面的代码可以工作,但是你可以看到我们需要为每个实体命中两次数据库(一次检索,另一次更新)。 使用Entity Framework有更有效的方法吗? 我注意到每个更新都会生成一个单独的SQL语句。 循环结束后是否有提交所有更新的方法?

从另一个进程获取win32线程的StartAddress

背景: 我在Win32中编写了一个multithreading应用程序,我使用System.Diagnostics命名空间中的Process类从C#代码开始。 现在,在C#代码中,我想获取Win32应用程序中创建的每个线程的起始地址的名称/符号,以便我可以将与线程相关的信息(例如CPU使用情况)记录到数据库中。 基本上,C#代码启动Win32应用程序的多个实例,监视它们,如果需要则终止,然后将info / error / exceptions / reason / etc记录到数据库。 为此,我已经包装了两个Win32 API即。 SymInitialize和SymFromAddr在我自己编写的程序友好的API中,如下所示: extern “C” { //wraps SymInitialize DllExport bool initialize_handler(HANDLE hModue); //wraps SymFromAddr DllExport bool get_function_symbol(HANDLE hModule, //in void *address, //in char *name); //out } 然后使用pinvoke从C#代码调用这些API。 但它不起作用, GetLastError提供126 错误代码 ,这意味着: 指定的模块无法找到 我将Process.Handle作为hModule传递给两个函数; initialize_handler似乎工作,但get_function_symbol没有; 它给出了上述错误。 我不确定我是否通过了正确的手柄。 我尝试传递以下句柄: Process.MainWindowHandle Process.MainModule.BaseAddress 两者都在第一步失败(即调用initialize_handler )。 我将Process.Threads[i].StartAddress作为第二个参数传递,这似乎是失败的原因,因为ProcessThread.StartAddress似乎是RtlUserThreadStart函数的地址, 而不是特定于应用程序的启动函数的地址。 […]

定期运行的Windows服务

我正在编写一个Windows服务,一旦启动就会每X小时运行一次。 它完成的过程相当密集,所以我想使用后台工作程序。 我正在使用设置文件来存储运行和上次运行服务之间的小时数。 我不确定最好的方法 – 也就是说,我希望服务尽可能少地使用资源,当它运行时,它需要在后台工作程序中运行,报告它做了什么,然后回到空闲模式。 我考虑过使用2名背景工作者。 第一个worker将是服务的私有局部变量,运行如下: while (true) { //create new background worker and run Thread.Sleep(Settings.Default.SleepTimeHours * 3600000); } 使用在循环的每次迭代中创建的子工作程序,并在完成时销毁。 为了支持取消,我想我必须在服务中有第二个工作者的本地实例,但如果当前进程没有运行它将为null。 当辅助工作程序完成时,它将发送我的报告,在设置文件中设置最后一次运行时间,然后处理该工作程序并将引用设置为null。 我想知道是否有更好的方法来做这个或最好的做法。 谢谢

如何向后阅读单链表?

我能想到的一种方法是反转列表然后阅读它。 但这涉及改变不好的清单。 或者我可以复制列表然后反转它,但这会使用额外的O(n)内存。 有没有更好的方法,不使用额外的内存,不修改列表,并在O(n)时间运行 反向链表代码在c#中是这样的 Void Reverse (Node head) { Node prev= null; Node current = head; Node nextNode = null; while (current!=null) { nextNode = current.Next; current.Next = prev; prev=current; current = nextNode; } head = prev; } 递归解决方案是 void ReadBackWard (Node n) { if (n==null) return; else ReadBackward(n.Next); Console.WriteLine(n.Data); }

我们能以编程方式比较相同分辨率的不同图像吗?

是否有一种良好可靠的方法来比较相同格式和相同分辨率的图像并获得它们之间的差异? 在最好的情况下,我正在寻找可以进行比较的图像的一些数字表示,因为我必须比较许多图像。

C#/ C ++中的非虚拟接口设计模式

在设计界面时,有人建议使用非虚拟界面模式。 有人可以简要概述这种模式的好处吗?

在datagridview中搜索并过滤它

我有一个关于这个代码的问题,我使用bindingsource来显示数据,这个代码只在我在datagridview中搜索时选择行。 我想知道如何过滤搜索数据。 private void button1_Click(object sender, EventArgs e) { string searchValue = textBox1.Text; dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; try { foreach (DataGridViewRow row in dataGridView1.Rows) { if (row.Cells[2].Value.ToString().Equals(searchValue)) { row.Selected = true; break; } } } catch (Exception exc) { MessageBox.Show(exc.Message); } }

如何使用st#:: vector作为C#参数调用非托管C ++函数?

出于性能原因,我有一个C#前端和一个C ++后端。 现在我想调用一个C ++函数,例如: void findNeighbors(Point p, std::vector &neighbors, double maxDist); 我想要的是一个C#包装函数,如: List FindNeigbors(Point p, double maxDist); 我可以将像Point []这样的平面数组传递给非托管C ++ dll,但问题是,我不知道要分配多少内存,因为我不知道函数将返回的元素数量… 是否有一种优雅的方式来处理这个没有内存泄漏的麻烦? 谢谢你的帮助! 本杰明

Javascript数组作为WCF Web服务参数

我需要将一个简单的Javascript数组传递给我的wcf ajax webservice: var array = new Array(); array[“ParamA”] = “xyz”; array[“12344”] = “9”; myNamespace.DoSomething(array); 这是我的WCF方法: [OperationContract] [WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] public void DoSomething(object values) 当使用我的值从javascript调用“values”时,它是一个空数组。 将一个简单的KeyValuePairs列表传递给我的webservice的最佳方法是什么?