小编syn*_*hko的帖子

在没有UAC提示的情况下从.NET应用程序执行进程

我有一个场景,我需要从我的.NET应用程序启动一个EXE,但我无法解决弹出的UAC提示.即使在启动其他EXE之前,也会触发提示 - 可能是在通话时Process.Start.

我使用此代码启动应用程序:

            var info = new ProcessStartInfo(path, "params");
            info.Verb = "runas";
            try
            {
                Process.Start(info);
            }
            catch (System.ComponentModel.Win32Exception)
            {
                // Person denied UAC escallation
                return false;
            }
Run Code Online (Sandbox Code Playgroud)

两个EXE(我的应用程序和其他EXE)都在其清单中定义了:

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

如何在不触发UAC提示的情况下执行其他EXE,并使其具有与调用应用程序相同的访问令牌(因此它可以更改app文件夹中的文件等)?

.net c# uac processstartinfo

8
推荐指数
1
解决办法
4895
查看次数

EmptyEnumerable <T> .Instance赋值和多线程设计

这更像是一个设计问题,而不是实际的错误或咆哮.我想知道人们对以下行为的看法:

在.NET中,当您想要有效地表示空IEnumerable时Enumerable.Empty<MyType>(),这将缓存空的可枚举实例.这是一个很好的免费微优化我认为如果依赖很多可能会有所帮助.

但是,这是实现的样子:

public static IEnumerable<TResult> Empty<TResult>() {
    return EmptyEnumerable<TResult>.Instance;
}


internal class EmptyEnumerable<TElement>
{
    static volatile TElement[] instance;

    public static IEnumerable<TElement> Instance {
        get {
            if (instance == null) instance = new TElement[0];
            return instance;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望在一次锁定之后,在另一次空检查之后发生赋值,但事实并非如此.

我想知道这是否是一个有意识的决定(即我们不关心可能创建几个对象,如果同时访问它们,我们将立即丢弃,因为我们宁愿避免锁定)或只是无知?

你会怎么做?

.net c# multithreading .net-4.5

4
推荐指数
1
解决办法
132
查看次数

标签 统计

.net ×2

c# ×2

.net-4.5 ×1

multithreading ×1

processstartinfo ×1

uac ×1