.net 如何为一次单击应用程序指定用户凭据?

.net 如何为一次单击应用程序指定用户凭据?,.net,installation,clickonce,credentials,.net,Installation,Clickonce,Credentials,对于常规的.exe文件,我总是可以右键单击并选择“运行方式…”。如何以类似的方式在不同凭据下运行单击一次应用程序 我指的是应用程序本身,而不是安装程序。您指的是一次性过程,还是每次代码在多台计算机上运行时都需要发生的事情?因为如果你只是想亲自运行一个具有提升权限的ClickOnce应用程序,这非常简单。单击位于%LOCALAPPDATA%\apps\2.0[模糊化文件夹名称]的应用程序。只需找到你的应用程序文件夹(时间戳应该是足够的信息),然后右键单击你的EXE并以管理员身份运行 如果您想在代码

对于常规的.exe文件,我总是可以右键单击并选择“运行方式…”。如何以类似的方式在不同凭据下运行单击一次应用程序


我指的是应用程序本身,而不是安装程序。

您指的是一次性过程,还是每次代码在多台计算机上运行时都需要发生的事情?因为如果你只是想亲自运行一个具有提升权限的ClickOnce应用程序,这非常简单。单击位于%LOCALAPPDATA%\apps\2.0[模糊化文件夹名称]的应用程序。只需找到你的应用程序文件夹(时间戳应该是足够的信息),然后右键单击你的EXE并以管理员身份运行


如果您想在代码中实现这一点,最简单的解决方案可能是围绕您的代码创建一个shell launcer应用程序,该应用程序在代码中请求提升的权限

答案确实是否定的,你不应该这样做。ClickOnce应用程序安装在用户配置文件下,并且只属于该用户。它们不会也不会作为全用户安装工作

还请注意,如果双击[exe]文件(每次更新时其位置都会更改),它将不会查找更新,也不会检查文件以确保它们未被篡改。换句话说,它不会作为ClickOnce应用程序运行


我还认为在查询字符串中传递用户名和密码是不明智的,因为任何运行fiddler或charles或任何其他网络流量嗅探器的人都可以看到凭据。

这实际上是可能的,您只需要分两步完成。首先,您需要以您尝试模拟的用户身份启动ClickOnce(
dfsvc.exe
),然后您可以使用
rundll32
启动部署应用程序,如下所示:

(从命令行)

1.-单击一次:

runas /user:domain\user "c:\Windows\Microsoft.NET\Framework\v4.0.30319\dfsvc.exe"
2.发布应用程序:

runas /user:domain\user "rundll32 c:\Windows\System32\dfshim.dll,ShOpenVerbApplication http://someurl.com/tool.application"

请注意,如果需要启动多个应用程序,您只需运行一次dfsvc.exe,当您关闭所有模拟的单击一次应用程序后,它将在一段时间后消失。

您知道自动更新后应用程序的位置是否会更改吗?我真正想做的是在计算机的域帐户下运行单击一次这不是域的一部分(但在同一个网络上)。我不相信你可以依靠路径保持一致,不。你如何部署你的clickOnce应用程序?文件共享还是IIS托管?如果是IIS,请检查此项。事实上,不管怎样,还是去看看吧。您应该能够通过URL传递登录信息来获取。例如(someserver/somesclickonceap.application?username=Joe&password=CORocks),我猜这两种方法都不会执行自动更新,因为我直接使用了.exe。这个答案救了我的命!我能够使用所描述的技巧,使用NTLM身份验证在两个不受信任的域之间打开ClickOnce应用程序。@Santo Twow times
user
?@turbanoff是的,您需要执行两次,否则第二次将在登录用户的上下文下启动ClickOnce应用程序。这就是你要问的吗?@Santo我不明白:我需要在哪里指定用户名和字符串
user
你需要从命令行(Windows键+R,键入cmd并按enter键)进行指定,然后输入两个命令,在这两种情况下都用你试图运行的域和用户替换domain\user。如果这是来自本地计算机的用户,则使用计算机名作为域。我希望这能有所帮助。请参阅下面的答案,它不需要硬编码密码就可以实现这一点。这是否明智并不是真正的问题。我不认为人们会在正常操作中这样做,但有时在dev中测试其他用户的体验是必要的。