我正在忙着用C++重写一个用C#完成的旧项目.
我的任务是重写程序,使其尽可能接近原始程序.
在一堆文件处理期间,编写该程序的前一个开发人员创建了一个包含大量字段的结构,这些字段对应于必须写入文件的设置格式,因此所有这些工作都已经完成.
这些字段都是字节数组.然后C++代码memset用来将整个结构设置为所有空格字符(0x20).一行代码.简单.
这非常重要,因为该文件最终会使用这种格式的文件.我必须做的是将此结构更改为C#中的类,但我找不到一种方法可以轻松地将每个字节数组初始化为所有空格字符.
我最终要做的是在类构造函数中:
//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
UserCode[index] = 0x20;
index++;
}
Run Code Online (Sandbox Code Playgroud)
这很好,但我确信必须有一个更简单的方法来做到这一点.当数组UserCode = new byte[6]在构造函数中设置为时,字节数组会自动初始化为默认的空值.是否有办法让它在声明时变成所有空格,所以当我调用我的类'构造函数时,它会像这样直接初始化?或者memset类似功能?
所有.这似乎是一个重复的问题,在这里有很多关于提升和取消儿童过程的问题.
我知道与使用提升权限启动一个子进程UseShellExecute = true的Verb = "runas"选项一起使用.
示例(在许多答案中找到):
var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location)
{
UseShellExecute = true, // !
Verb = "runas",
};
Run Code Online (Sandbox Code Playgroud)
我的问题是没有启动具有提升访问权限的子进程,我想知道是否有一种方法只提示一次提升访问权限,之后启动相同的子进程几次,例如8个.
我正在使用的应用程序使用排队系统来处理任务.根据用户的内核数量,为每个内核启动子进程(QueueProcessor),然后开始处理此队列.所以从本质上讲,我想检查用户的权限,提示一次提升权限,并启动所有8个队列处理器.
我不能使用manifest-route来要求整个应用程序在Admin-rights中运行,因为这不是我们许多用户的选项.编辑按照@ MPatel的评论:为了澄清,我们特别强制不要强迫用户按照设计决策以管理员身份运行应用程序.
显然,当你每次想要运行其中一个任务时,你必须单击UAC对话8次时,你会看到它会变得烦人.
在我的搜索过程中,我遇到了这篇文章:Vista UAC The Definitive Guide,但我在C#,.NET 3.5项目中实现C++ dll时遇到了麻烦.这篇文章基本上让我问这是否可行.
还有一件事可能值得一提:我不确定我是否会稍微误解这个问题.用户必须至少具有足够的访问权限才能使用我们程序使用的基本SQL功能.因此,我认为我的问题可能不是让子进程以完全管理员权限运行,而只是让子进程启动.我遇到的问题是.NET不允许某些用户从正在运行的应用程序运行子进程.让用户使用"以管理员身份运行"运行主应用程序似乎可以解决此问题.是否有一些UAC特定权限我可以通过提示设置一次只是允许主应用程序启动child.exe?