【问题标题】:Cannot call ShellExecute "runas" from ClickOnce application无法从 ClickOnce 应用程序调用 ShellExecute “runas”
【发布时间】:2012-02-29 21:39:13
【问题描述】:

我有一个 ClickOnce 应用程序需要执行 regasm,以注册它刚刚更新的程序集。

如果 UAC 关闭,它可以正常工作。但是,如果打开 UAC,regsam 的退出代码是 100。如果我在 cmd 提示符下运行相同的命令,它会失败并显示有关需要管理员权限的消息。如果我在打开 cmd 提示符时使用 run as admin 选项,它会成功。

我尝试在清单中将asInvoker 更改为highestAvailable,这在本地工作,但ClickOnce 拒绝以这种方式发布它。我尝试为 RegistryPermission 添加命令式权限需求,但无济于事。我试过设置

ProcessStartInfo.verb = "runas" 

and .UseShellExecute = True

但还是没有爱!

我已经阅读了大量有关 CAS、UAC 和 ClickOnce 的内容...我看到一些关于 UAC 与 ClickOnce 梦想不一致的内容(这让我觉得完全是 BS,但无论如何)所以我想我的问题是,我想要做的甚至可能吗?如果有,怎么做?


其余的只是背景信息,并不严格相关:令人发指的是,项目已经完成,除了这个问题!

该项目的目的是自动更新 Outlook 的“共享”插件 (IExtensibility2)。由于我们选择退出 VSTO,因此我们无法使用本机 ClickOnce 支持,因此我创建了一个 ClickOnce 应用程序,我们将更新后的 DLL 作为资源嵌入其中。它在启动时执行,因此当新版本的 ClickOnce 应用程序可用时,它会自动下载;当它执行时,它会将安装的版本与嵌入的副本的版本进行比较,并提示用户其嵌入的版本是否较新。希望我们能够利用 ClickOnce 而不是自己推出(这是我们为旧版 VB6 版本所做的)。

【问题讨论】:

    标签: clickonce uac cas


    【解决方案1】:

    如果您需要的不仅仅是沙盒权限,您最好选择完全信任的应用程序。在 .Net 4.0 中,所有 CAS 都已弃用。 .Net 4.0 中的完全信任点击一次应用程序几乎可以做任何事情。

    【讨论】:

    • 我在安全选项卡中设置了“这是一个完全信任的应用程序”单选按钮。只要 UAC 被禁用,它就可以做任何事情,但如果不是,它会失败/不提示提升。
    • 实际上,这是我的错,UseShellExecute 没有设置为 True,这就是问题所在;将那个和动词设置为“runas”,就会调用 UAC。
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多