2017-06-22 206 views
-2

我有一個安裝程序RequestExecutionLevel user(我想保留啓動我的安裝程序沒有管理員權限的可能性)。但我想知道一種刪除當前用戶的所有應用程序快捷方式的方法。這樣的命令是否存在?在兩個地方NSIS可以刪除非管理員當前用戶的所有快捷方式嗎?

+0

你真的嘗試過嗎?我不明白爲什麼你只談論快捷鍵的特定用戶,並適用於所有用戶不NSIS的快捷方式無法做到這一點,只要。 – Anders

+0

我該怎麼辦?卸載當前用戶的所有快捷方式後不會自動刪除。 –

回答

1

的Windows商店的快捷鍵,快捷鍵的私人存儲在他們的個人資料的用戶和提供給所有用戶的文件夾中的快捷方式訪問(但不一定是可寫的)的所有用戶。

試運行這樣

Section 
SetShellVarContext current ; Used for demonstration purposes, it is the default context 
DetailPrint $StartMenu 
DetailPrint $SMPrograms 
DetailPrint $Desktop 
DetailPrint --- 
SetShellVarContext all 
DetailPrint $StartMenu 
DetailPrint $SMPrograms 
DetailPrint $Desktop 
SectionEnd 

,你應該得到這樣的事情

C:\Users\Anders\AppData\Roaming\Microsoft\Windows\Start Menu 
C:\Users\Anders\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
C:\Users\Anders\Desktop 
--- 
C:\ProgramData\Microsoft\Windows\Start Menu 
C:\ProgramData\Microsoft\Windows\Start Menu\Programs 
C:\Users\Public\Desktop 

RequestExecutionLevel user一個卸載程序將只能夠在用戶(目前的)情況下刪除快捷方式,但該如果你的安裝者首先在那裏寫它們,那麼這不是問題。

NSIS不會自動刪除快捷方式,你必須手動完成:

Section "Installer" 
SetOutPath $InstDir 
File "MyApp.exe" 
WriteUninstaller "$InstDir\Uninst.exe" 
CreateDirectory "$SMPrograms\MyApp" 
CreateShortcut "$SMPrograms\MyApp\MyApp.lnk" 
CreateShortcut "$SMPrograms\MyApp\MyApp (No extensions).lnk" "-NoExt" 
SectionEnd 

Section "Uninstaller" 
Delete "$SMPrograms\MyApp\MyApp.lnk" 
Delete "$SMPrograms\MyApp\MyApp (No extensions).lnk" 
RMDir "$SMPrograms\MyApp" 
Delete "$InstDir\MyApp.exe" 
Delete "$InstDir\Uninst.exe" 
RMDir "$InstDir" 
SectionEnd 

這是不正常的行爲安裝,刪除用戶創建其他自定義快捷鍵。您可以通過使用FindFirstWin\COM.nsh的COM的IShellLink接口來枚舉和檢查每一個快捷方式,刪除指向您的應用程序快捷方式在理論上做到這一點。

固定快捷方式和跳轉列表可以使用WinShell plug-inusing the COM interfaces directly刪除。

+0

'這是不正常的行爲安裝刪除由users.'創建的其他自定義快捷鍵,但這些快捷方式將卸載之後被打破。 「FindFirst」真的很快命令,或者我不應該試試這個?我的意思是,如果這會執行很長時間(例如超過一分鐘),我不會這樣做。 –

相關問題