Eğer windows 7 ve üzeri sistemlerde UAC (Kullanıcı hesabı denetimi) açıksa .vbs scriptleri tıkladığınızda çalışmayacaktır , bunların yönetici olarak çalıştırılmaları gerekir , gel gelelim gerek Windows 7 de
gerekse Windosw 8 ve 8.1 de herhangi bir .vbs scripte sağ tıkladığınızda Yönetici olarak çalıştır çıkmaz , shift tuşuna basılı tutup sağ tıklamanızda sonucu değiştirmeyecektir , elbette Kullanıcı hesabı denetimini kapatmak ilk akla gelen çözüm gibi de görünse sakıncaları sebebi ile kabuledilebilir bir çözüm sayılmayabilir , en azından arka planda bizden habersiz çalışmaya kalkan bir uygulama konusunda bizleri uyarması , yönetici olsak bile bir değişiklik yapmaya kalktığımızda onay sorması (ki yanlışlıkla yapılacak değişiklikler önlenmiş olur) ... gibi faydaları Kullanıcı hesabı denetiminin açık kalmasının gerekliliklerinden bazılarıdır , peki o halde ne yapabiliriz ?
1. .vbs için sağ tuşa yönetici olarak çalıştır eklemek : Böylece hem .vbs çalışmış olur hemde UAC yi kapatmak zorunda kalmayız , bunun için aşağıdaki .reg kaydını kullanabilirsiniz
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\VBSFile\Shell\RunAs] "HasLUAShield"="" [HKEY_CLASSES_ROOT\VBSFile\Shell\RunAs\Command] @=hex(2):22,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\ 00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,\ 53,00,63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,22,00,20,00,22,\ 00,25,00,31,00,22,00,20,00,25,00,2a,00,00,00
Eğer ilgili Reg kaydını varsayılan haline döndürmek istersek aşağıdaki kaydı kullanmamız gerekir
Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\VBSFile\Shell\RunAs]
Bu kodları bir notepad e yapıştırıp ve Dosya – Farklı Kaydet… seçeneğine tıklayın
Açılan pencerede herhangi bir isim verin (dosya ismi ve uzantısı kısmını isteğinize göre düzenleyin) ve .reg olarak kaydedip çalıştırın
sonuş aşağıdaki resimdeki gibi olacaktır , artık bir .vbs dosyasını sağ tıkladığınızda yönetici olarak çalıştır çıkacaktır
2. Her defasında sağ tıklayıp yönetici olarak çalıştır demek okadarda pratik birşey değildir , peki tıklandığında direkt yönetici olarak çalıştır onayı gelse çok daha iyi olmazmı ? işt .vbs kodumuzu aşağıdaki kodun Start of code ve End of code arasına yerleştirirsek (Aradaki kodu silerek) istediğimizi elde etmiş olur ve .vbs lerin Windows 7 ve üzerinde çalışmama sorununa çözüm bulmuş oluruz.
'-------------- 'Start of UAC workaround code If WScript.Arguments.length =0 Then Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "wscript.exe", Chr(34) & _ WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 Else '-------------- 'Start of code WScript.Echo "This code is ran as an elevated user, ie. 'Administrator'" '-------------- 'End of code '-------------- 'End of UAC workaround code End If
Eğer üstteki kod size karışık geldiyse aşağıdakini de kullanabilirsiniz
If Not WScript.Arguments.Named.Exists("elevate") Then CreateObject("Shell.Application").ShellExecute WScript.FullName _ , WScript.ScriptFullName & " /elevate", "", "runas", 1 WScript.Quit End If 'esas kod bundan sonra gelecek
Fakat bu yönetici olarak çalıştır kodlarında şöyle bir sorun oluşabilir ; eğer Current directory (Mevcut disin) kulanmak isterseniz script System32 de işlem göreceği için mesela bir kopylama işleminde ilgili dosyayı/klasörü orada arayacak ve hata verecektir bundan kaçınmak için aşağıdaki kod işinizi görecektir
If WScript.Arguments.Named.Exists("elevated") = False Then 'Launch the script again as administrator CreateObject("Shell.Application").ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ /elevated", "", "runas", 1 WScript.Quit Else 'Change the working directory from the system32 folder back to the script's folder. Set oShell = CreateObject("WScript.Shell") oShell.CurrentDirectory = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) End If 'Real code :
Yani üsttekini Mevcut dizin kodları bulunan Vbs scriptinde en başa kopyalar ve asıl kodlarınızı "Real code :" den sonra kullanırsanız script hem yönetici yetkilerinde çalışır hemde bulamadı hatası vermez.
O kodları çıkarmayı dene veya dediğim yazılımları test et, zaten o başlığı güncelleyeceğim.
anladım refresh ettiği için masaüstü yanıp sönüyor ~~ ÇOK TEŞEKKÜRLER SİTENİZ ÇOK YARARLI GÜNÜM BURADA GEÇİYOR ~~
Sayıca oldukça fazla script Kodluyoruz, o an o windows sürümünde çalışan scriptin sonraki sürümlerde çalışma garantisi yoktur, işin en kötü yönüde bu , sırf bu yüzden Microsoftu Protesto etmek için Bir sürü Coder Windowsa yazılım kodlamayı bıraktı. Bizdeki scriptteki kod masaüstünü refresh ediyor senin istediğin Temp silicide böyle birşeye gerek yok. Verdiğim linkteki temp siliciyi zamanlanmış görevler den her x dakikada bir çalışacak şekilde ayarlarsan çok daha sağlıklı olacaktır diye düşünüyorum.
Web Link ...
Web Link ... sizin kodlarınız
bende kodları sizden aldım zaten oto dosya silici diye
Geçici dosyaları sildiren hazır scriptler zaten mevcut mesela aşağıdaki
Web Link ...
senin kodlarındaki "Program manager" nedir hiçbir fikrim yok
benki %temp% kısmı hatalı olabilir belki orası hatalıdır o yüzden sürekli es geçip devam ediyodur hatayı doğru kod nasıl olabilir?
'bir hata olduğunu düşünmüyorum
On Error Resume Next
Set WshShell = WScript.CreateObject("Wscript.Shell")
vAPPDATA = WshShell.ExpandEnvironmentStrings("%temp%")
strFolder = vAPPDATA
SET objFSO = CreateObject("Scripting.FileSystemObject")
Do
If NOT objFSO.FolderExists(strFolder) Then
WScript.Sleep 10000
else
objFSO.DeleteFolder vAPPDATA
Set WSHShell = CreateObject("WScript.Shell")
WshShell.AppActivate "Program Manager"
End If
Loop
kod hata olursa devam et demektir. Bence sen kodlarını gözden geçir.