如何设置 .lnk 文件的目标而不是 targetPath?我找不到可以在 powershell 或 c# 中使用的 .dll。大多数人可能会尝试使用 wshshell 来设置 .lnk 变量的 .targetpath。这不是我要问的问题。
使用 powershell 用环境变量设置目标会很好...但我找不到任何东西...大多数人一直在谈论 wshshell,但如果你尝试使用它,你会注意到它并没有真正使用环境变量作为路径设置目标。事实上,强制它只会导致错误,说 targetpath 超出范围。
答案1
好的,在阅读了一些有关使用 wshshell 对象的文档和程序后,我实际上想出了一个可行的解决方案,我可能会在工作中使用它。我花了一段时间才意识到,我实际上无法使用 /runas 为可执行文件设置目标路径,目标位置在 Sys32s Powershell 文件夹中...相反...我只需将工作目录设置为 System32,将 TargetPath 设置为 runAs.exe...从您提供给 runAs.exe 的参数来看,您提供了扩展的 powershell .ps1 启动参数。
下面是一个示例,它在提示您输入微软密码后启动我的渐变应用程序....--->
$myAppName = 'spectrumFormLauncher.ps1'
$myLinkName = 'myLink.lnk'
$myAppFolder = 'Spex'
$myIconName = 'spex.ico'
$cactName = $env:userprofile +"\documents\"+$myAppFolder
$cactName2 = $env:userprofile + "\desktop"
$SourceExeArg = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$SourceExe = "C:\Windows\System32\runAs.exe"
$myDom = $env:USERDOMAIN
$myU = $env:USERNAME
$Arg = '/profile /user:'+$myDom+"\"+$myU
$myAppZoned = '"'+$cactName+'\modules\'+$myAppName+'"'
$ArgumentsToParameters = ' "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -WindowStyle hidden -File ' + $myAppZoned
$ArgumentsToSourceExe = $Arg + $ArgumentsToParameters
$DestinationPath = $cactName2+"\" +$myLinkName
$testShortCut = Test-Path $DestinationPath
if($testShortCut -eq $true)
{
Remove-Item -Path $DestinationPath -Confirm:$false -ErrorAction SilentlyContinue -Recurse
}
$SourceExe2 ="C:\Windows\System32\"
$iconSpot = $cactName + "\media\"+$myIconName
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($DestinationPath)
$Shortcut.IconLocation = $iconSpot
$Shortcut.WorkingDirectory = $SourceExe2
$Shortcut.TargetPath = $SourceExe
$Shortcut.Arguments = $ArgumentsToSourceExe
$Shortcut.Save()
我在 C++ 程序中的位置
// TODO: Place code here.
//HRESULT CreateLink(LPCWSTR lpszPathObj, LPCSTR lpszPathLink, LPCWSTR lpszDesc)
// HRESULT ResolveIt(HWND hwnd, LPCSTR lpszLinkFile, LPWSTR lpszPath, int iPathBufferSize)
const wchar_t *lpszPathObj = L"C:\\users\\zero8\\desktop\\go.lnk";
const char *lpszpathLink = "powershell.exe";
const wchar_t *lpszDesc = L"whatever";
CreateLink(lpszPathObj, lpszpathLink, lpszDesc);