Oluşturduğum exe sorunsuz her bilgisayarda çalışıyor bende smart install maker programı ile setup haline getirdim. Bu işlemi yaparken smart install maker’dan her seferinde yönetici olarak çalıştırma seçeneğini seçiyorum ancak işe yaramıyor. Setup’ı açıp bilgisayarıma kurduğumda programımın tamamının istediğim gibi çalışmadığını fark ettim. Bir json dosyası oluşturuyorum daha sonra programda belirli koşullarda dosyanın içini değiştiriyorum ve sıkıntıyı bunun yarattığını düşünüyorum. Programı “Yönetici olarak çalıştır” ile açarsam herşeyin çok sıkıntısız çalıştığını fark ettim. Her açılışta otomatik olarak yönetici izni sormasını nasıl sağlarım ?
Setup maker programı ile yaptığınız şey setup’ın admin ile başlaması. Ancak programın admin ile başlaması setup’dan ayrı bir olay.
Programınız muhtemelen Program Files içerisine kuruluyor, ve yine programınız çalışırken json dosyasını Program Files içerisinde program dosyalarının olduğu yerde oluşturuyor. Bu yüzden sorun çıkıyor, çünkü Program Files dizini özel bir dizin ve burada dosya oluşturmak riskli sayılıyor. Aklıma iki çözüm yöntemi geliyor.
İlk olarak programınız tarafından oluşturulan dosyaların sorun oluşturmaması ve admin engeline takılmaması için, bu dosyaları kullanıcının ana dizininde bir özel klasörde oluşturmanız gerekir. (C:\Users\User\AppData\Local\<Uyguluma ismi>\dosyam.json) gibi. Çoğu program bu yolu tercih ediyor. Zaten kullanıcı ana dizinine giderseniz bir sürü programın klasörlerini göreceksiniz.
Program her başladığında admin yetkisiyle açılıp açılmadığını kontrol edecek ve admin izni isteyecek, ki bu zor yol.
Şu an Windows kullanmıyorum, aklımda kaldığı kadarıyla çözüm sundum. Bunları test edip onaylarsanız çok memnun olurum.
Geri dönüşleriniz için teşekkür ederim sizin cevabınızı görmeden önce şöyle bir çözüm bulmuştum bende işe yarıyor gibi duruyor ufak değişiklikler yaptım ama orjinal halini bulamadım
import ctypes
from tkinter import *
import sys
x=42
if not ctypes.windll.shell32.IsUserAnAdmin():
x= ctypes.windll.shell32.ShellExecuteW(
None, 'runas', sys.executable, ' '.join(sys.argv), None, None) ##
if x == 42:
# Your Code Here
else:
exit(0)
yanına diyez işaretleri koyduğum satır yönetici iznini soruyor debug ile kontrol ettiğimde yönetici iznini onaylarsam 42, onaylamazsam 5 döndürdü bu nedenle if x==42 bloğunun altına kendi kodlarımı yazdım ve setuptan sonrada sıkıntısız çalıştı windows 10 ve python 3.7 kullanıyorum ancak @coderistan sizin ilk öneriniz çok daha mantıklı ve zahmetsiz bana kalırsa, çok teşekkür ederim