如何使用 powershell 或 c++ 以编程方式设置 .lnk 文件的目标而不是目标路径?

如何使用 powershell 或 c++ 以编程方式设置 .lnk 文件的目标而不是目标路径?

如何设置 .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()

Spex 渐变应用程序

我在 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); 

在此处输入图片描述

在此处输入图片描述

相关内容