È ansible bloccare gli installatori a creare scorciatoie da desktop?

Ho tenuto il mio desktop totalmente libero dalle scorciatoie. Preferisco non wherermi agire per farlo.

Non credo che puoi distriggersre tutti i programmi dalla creazione di collegamenti, ma utilizzo le Recinzioni .

Permette di raggruppare le icone sul desktop, ma soprattutto quando si fa doppio clic sul desktop nasconde tutto l'elemento che non è nelle recinzioni.

alt text

Non esiste alcuna impostazione di sovrascrittura che sono consapevole di ciò che lo interrompe, però hai tre opzioni: una pericolosa, una sorta di bypass e una sicura!

Pericoloso

Modificare le impostazioni di protezione nelle seguenti cartelle: (Andare in alto una cartella, fare clic con il button destro del mouse e fare le properties;)

c:\users\<name>\Desktop or %userprofile%\Desktop and c:\users\default\Desktop 

Avanti, vai alla scheda di protezione e fai clic su modifica. Si desidera mettere la properties; Deny su Modifica e scrittura. Dovresti fare questo solo per il tuo utente se il programma di installazione viene eseguito sotto il tuo utente.

Questo ha il problema che non è ansible creare icone, ma dovrebbe funzionare.

Modo sicuro

Basta cancellare qualsiasi icona che viene generata da un'installazione!

Bypass modo

Fare clic con il button destro del mouse su un desktop qualsiasi where non ci sono elementi. Espandere l'opzione di visualizzazione e deselect "Mostra icone desktop" … Questo ovviamente ha il lato negativo che non avrai alcuna icona – ma se questo è ciò che stai cercando di get, non import!

Ecco un modo semplice utilizzando le attività pianificate e non è necessario scrivere script o programmi personalizzati.

Ho impostato un'operazione pianificata per eliminare le icone. È un po 'imperfetta, perché funziona periodicamente (e dopo l'installazione completa di MSI) ma funziona (e dopo averlo utilizzato per 6 mesi: funziona abbastanza bene). Elimina i collegamenti direttamente sul desktop sia dell'attuale utente che del profilo utente "pubblico", anche se ovviamente dipende dall'authorization di farlo.


L'attività viene creata come segue:

  • Nome: Elimina scorciatoie da tavoletta
  • Esegui con i privilegi più alti

Schedulatore di attività - Generale

  • trigger:
    • In un evento:
      • Log: Application
      • Fonte: MsiInstaller
      • ID evento: 1042
    • Ogni giorno: each 5am each giorno

Schedulatore di attività - Condizioni

  • Azione: avviare un programma
    • Programma / script: cmd
    • Argomenti: /c for %f in (%userprofile%\Desktop\*.lnk %userprofile%\..\Public\Desktop\*.lnk) do del "%f"

Schedulatore di attività - Azioni

  • Condizioni: nessuna

Schedulatore di attività - Condizioni


Ecco l'attività che puoi salvare come file .xml e quindi importre nel task-scheduler di Windows:

 <?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2012-11-02T00:46:01.691625</Date> <Author>Gregmac</Author> </RegistrationInfo> <Triggers> <EventTrigger> <Enabled>true</Enabled> <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Application"&gt;&lt;Select Path="Application"&gt;*[System[Provider[@Name='MsiInstaller'] and EventID=1042]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription> </EventTrigger> <CalendarTrigger> <StartBoundary>2012-11-02T05:00:00</StartBoundary> <Enabled>true</Enabled> <ScheduleByDay> <DaysInterval>1</DaysInterval> </ScheduleByDay> </CalendarTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>Greg</UserId> <LogonType>InteractiveToken</LogonType> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>P3D</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>cmd</Command> <Arguments>/c for %f in (%userprofile%\Desktop\*.lnk %userprofile%\..\Public\Desktop\*.lnk) do del "%f"</Arguments> </Exec> </Actions> </Task> 

Non so se c'è un modo per farlo all'interno di Windows, ma so che questo codice BASIC functionrà:

 Kill("C:\Users\<name>\Desktop\*.lnk") 

Questo elimina automaticamente tutti i collegamenti sul desktop.

Altrimenti, non so di nessun modo, tranne manualmente l'eliminazione
(che richiede solo qualche secondo)
Se davvero non volessi farlo, avrei usato il "modo pericoloso" che suggerisce @William