我有一个场景,我需要从我的.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中,当您想要有效地表示空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)
我希望在一次锁定之后,在另一次空检查之后发生赋值,但事实并非如此.
我想知道这是否是一个有意识的决定(即我们不关心可能创建几个对象,如果同时访问它们,我们将立即丢弃,因为我们宁愿避免锁定)或只是无知?
你会怎么做?