ber*_*hof 3 windows-installer shortcut setup-project visual-studio-2010 setup-deployment
我在Visual Studio 2010中有一个安装和部署项目.
我希望安装程序在我的解决方案中创建另一个项目的可执行文件的两个快捷方式.一个普通的快捷方式,它使用当前凭据简单地运行应用程序,另一个使用"设置为管理员"标志,从而确保在单击快捷方式时要求用户提供具有管理权限的凭据.

使用管理权限运行应用程序将启用某些不可用的功能.
乍一看似乎无法设置此标志.可以直接在Visual Studio中完成吗?如果没有,还有其他选择吗?
编辑:如果没有,是否可以使用自定义安装程序类以编程方式修改快捷方式?
我知道这是一个很老的问题,但我需要找到答案,我想我可以帮助其他搜索者.我写了一个小函数来在VBScript中执行此任务(粘贴在下面).它很容易适应VB.net/VB6.
从函数返回代码:
0 - 成功,更改了快捷方式.
99 - 已设置为管理员运行的快捷方式标志.
114017 - 找不到文件
114038 - 数据文件格式无效(特别是文件太小)
所有其他非零=意外错误.
正如Chada在后面的文章中所提到的,这个脚本不适用于msi广告的快捷方式.如果使用此方法操作快捷方式中的位,则它必须是标准的,未通告的快捷方式.
参考文献:MS Shortcut LNK格式:http://msdn.microsoft.com/en-us/library/dd871305
一些启示: 在VBscript中读写二进制文件
请注意,该函数不会检查有效的LNK快捷方式.事实上,你可以提供任何文件,它会改变文件中的十六进制字节15h,将第32位设置为开启.
如果在修改之前将原始快捷方式复制到%TEMP%.
哈根达斯.
'# D.Collins - 12:58 03/09/2012
'# Sets a shortcut to have the RunAs flag set. Drag an LNK file onto this script to test
Option Explicit
Dim oArgs, ret
Set oArgs = WScript.Arguments
If oArgs.Count > 0 Then
ret = fSetRunAsOnLNK(oArgs(0))
MsgBox "Done, return = " & ret
Else
MsgBox "No Args"
End If
Function fSetRunAsOnLNK(sInputLNK)
Dim fso, wshShell, oFile, iSize, aInput(), ts, i
Set fso = CreateObject("Scripting.FileSystemObject")
Set wshShell = CreateObject("WScript.Shell")
If Not fso.FileExists(sInputLNK) Then fSetRunAsOnLNK = 114017 : Exit Function
Set oFile = fso.GetFile(sInputLNK)
iSize = oFile.Size
ReDim aInput(iSize)
Set ts = oFile.OpenAsTextStream()
i = 0
Do While Not ts.AtEndOfStream
aInput(i) = ts.Read(1)
i = i + 1
Loop
ts.Close
If UBound(aInput) < 50 Then fSetRunAsOnLNK = 114038 : Exit Function
If (Asc(aInput(21)) And 32) = 0 Then
aInput(21) = Chr(Asc(aInput(21)) + 32)
Else
fSetRunAsOnLNK = 99 : Exit Function
End If
fso.CopyFile sInputLNK, wshShell.ExpandEnvironmentStrings("%temp%\" & oFile.Name & "." & Hour(Now()) & "-" & Minute(Now()) & "-" & Second(Now()))
On Error Resume Next
Set ts = fso.CreateTextFile(sInputLNK, True)
If Err.Number <> 0 Then fSetRunAsOnLNK = Err.number : Exit Function
ts.Write(Join(aInput, ""))
If Err.Number <> 0 Then fSetRunAsOnLNK = Err.number : Exit Function
ts.Close
fSetRunAsOnLNK = 0
End Function
Run Code Online (Sandbox Code Playgroud)
小智 5
这主要是因为Windows Installer对Windows Installer程序包使用"广告快捷方式".
在Visual Studio中无法自行禁用此功能,但可以修改生成的MSI以确保它不使用通告的快捷方式(或仅使用一个).有两种方法:
最好使用第一种方法,创建2个快捷方式,并在ORCA中只修改一个,这样您就可以右键单击并以管理员身份运行.
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
33516 次 |
| 最近记录: |