Program files yazma izni

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Program files yazma izni

Mesaj gönderen hido »

Merhaba


windows 7 Program files içinde olan (C:\Program Files\Test\database.db) databaseye Program Files yazma yetkisi olmadığından
kayıt sırasında (database is locked) hatası veriyor yetkileri amdin olarak değiştidiğimde sorun olmuyor fakat her programı yükleyene durumu anlatamazsın
bunu nasıl çöze bilirim acaba...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Program files yazma izni

Mesaj gönderen mussimsek »

Merhaba,

Veritabanını kullanıcının yazma yetkisi olan bir yere koymanız lazım. Bu iş için windows'un belirlediği klasörler var. Users klasörü altındaydı sanırım ama dökümanlara bakmak lazım...

Kolay gelsin.
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Program files yazma izni

Mesaj gönderen xozcanx »

Merhaba;
C:\Program Files\Test\ klasörünün özelliklerini açtığınızda Güvenlik Sekmesini göreceksiniz. "İzinleri Değiştirmek için, Düzenleyi Tıklayın " yazısının karşısında bulunan "Düzenle" Butonuna tıklayın. Gelen ekranda Grup yada kullanıc Adları bölümünden İşlem yapmak istediğiniz kulllanıcıyı seçin daha sonra "Users İçin İzinler " Bölümünde Tam Denetim, Değiştirme Alanlarını göreceksiniz bunları işaretleyip Tamam diyelim. bunun ardından tekrar deneyin bakalım sorun devam ediyormu.
Kolay Gelsin.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Program files yazma izni

Mesaj gönderen hido »

xozcanx yazdı:Merhaba;
C:\Program Files\Test\ klasörünün özelliklerini açtığınızda Güvenlik Sekmesini göreceksiniz. "İzinleri Değiştirmek için, Düzenleyi Tıklayın " yazısının karşısında bulunan "Düzenle" Butonuna tıklayın. Gelen ekranda Grup yada kullanıc Adları bölümünden İşlem yapmak istediğiniz kulllanıcıyı seçin daha sonra "Users İçin İzinler " Bölümünde Tam Denetim, Değiştirme Alanlarını göreceksiniz bunları işaretleyip Tamam diyelim. bunun ardından tekrar deneyin bakalım sorun devam ediyormu.
Kolay Gelsin.

Selam sorunu kendi bilgisayarımda kısmen çözdüm fakat programı başka bilgisayara yüklediğimde aynı sorun o bilgisayarda da ortaya çıktı bu durum nasıl çöze bilirim?
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Program files yazma izni

Mesaj gönderen xozcanx »

Tahminimce kurulum yaptığınız makineler bir etki alanı altında çalışıyor ve c altına dosya yazma izinleri kapatılmıştır. Her makineye ayrı veritabanı kurmuyorsanız ve diğer makinelerinde bu veritabanına yazma işlemini yapabilmelerini istiyorsanız şunu yapın Yine aynı ekranda "Düzenle" Butonuna tıkladıktan sonra Ekle Butonu vardır. burada Gelişmiş Butonuna tıklayın pencere genişleyecektir, daha sonra şimdi bul butonuna tıklayın kullanıcılar listelenecektir. Buradan Everyone kullanıcısını seçin Tamam dedikten sonra Bu kullanıcı içinde Tam denedim ve Değiştirme alanlarını işaretlerseniz tüm kullanıcılar bu klasöre erişebilecetir. Hem okuma hem yazma tam denetim yetkisi bulunacaktır.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Program files yazma izni

Mesaj gönderen hido »

xozcanx yazdı:Tahminimce kurulum yaptığınız makineler bir etki alanı altında çalışıyor ve c altına dosya yazma izinleri kapatılmıştır. Her makineye ayrı veritabanı kurmuyorsanız ve diğer makinelerinde bu veritabanına yazma işlemini yapabilmelerini istiyorsanız şunu yapın Yine aynı ekranda "Düzenle" Butonuna tıkladıktan sonra Ekle Butonu vardır. burada Gelişmiş Butonuna tıklayın pencere genişleyecektir, daha sonra şimdi bul butonuna tıklayın kullanıcılar listelenecektir. Buradan Everyone kullanıcısını seçin Tamam dedikten sonra Bu kullanıcı içinde Tam denedim ve Değiştirme alanlarını işaretlerseniz tüm kullanıcılar bu klasöre erişebilecetir. Hem okuma hem yazma tam denetim yetkisi bulunacaktır.

Teşekkür ederim bilgilendirme için,

Programı ben kuruyorsam sorun yok yetkileri değiştiririm ve kullanıcı sorun yaşamaz tanımadığım bir kişi programı kurmak istediğinde ne olacak adam programı kurdu (database is locked) diye uyarı verdi adam bu sefer programı kurmaktan
vaz geçer bu durumu kodlama tarafında çözmem gerek...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Program files yazma izni

Mesaj gönderen mrmarman »

Rasyonel çözüm önerilmiş zaten.
mussimsek yazdı:Merhaba,

Veritabanını kullanıcının yazma yetkisi olan bir yere koymanız lazım. Bu iş için windows'un belirlediği klasörler var. Users klasörü altındaydı sanırım ama dökümanlara bakmak lazım...

Kolay gelsin.
+1

Bunda da tek handikap All Users altında olmalı. Aktif kullanıcı altına koyarsanız aynı bilgisayarda oturum açacak başka kullanıcı erişemez. Buna uygun tek yer All Users altıdır.





.
Resim
Resim ....Resim
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Program files yazma izni

Mesaj gönderen hido »

mrmarman yazdı:Rasyonel çözüm önerilmiş zaten.
mussimsek yazdı:Merhaba,

Veritabanını kullanıcının yazma yetkisi olan bir yere koymanız lazım. Bu iş için windows'un belirlediği klasörler var. Users klasörü altındaydı sanırım ama dökümanlara bakmak lazım...

Kolay gelsin.
+1

Bunda da tek handikap All Users altında olmalı. Aktif kullanıcı altına koyarsanız aynı bilgisayarda oturum açacak başka kullanıcı erişemez. Buna uygun tek yer All Users altıdır.

.
Anlayamadığım şey sizin kodlamanızı kullandığımda SQLQuery ve SQLConnection bir birine bağlamayıp manuel olarak yaptığımda (C:\Program Files\Test\database.db) databaseye kayıt sırasında sorun olmuyor da
SQLQuery ve SQLConnection bir birine bağladığımda ise neden (database is locked) hatası veriyor... Umarım anlata bilmişimdir :)

procedure TForm1.Button1Click(Sender: TObject);
begin
with SQLQuery1 do
begin
Close;
SQL.Clear;
Sql.add('Insert Into USER (KULLANICIADI, KULLANICISIFRE)');
Sql.add(' Values (:Kadi, :KadiSif)');
ParamByName('Kadi').AsString:= Edit1.Text;
ParamByName('KadiSif').AsString:= Edit2.Text;
ExecSQL;

// SQL cümlemizi yollayalım...
ClientDataSet1.Active := False;
ClientDataSet1.CommandText := 'SELECT * FROM [USER]';
ClientDataSet1.Active := True;
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
SQLConnection1.Connected := False;
SQLConnection1.Params.Values['Database'] := ExtractFilePath(Application.ExeName) + 'Database\MyDatabase.db';
try
SQLConnection1.Connected := True;
Statusbar1.Panels[1].Text := 'Database İle Bağlantı Sağlandı!';

ClientDataSet1.ProviderName := 'DataSetProvider1';
DataSetProvider1.DataSet := SQLQuery1;
DataSetProvider1.Options := [poAllowCommandText];

DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := ClientDataSet1;

// SQL cümlemizi yollayalım...
ClientDataSet1.Active := False;
ClientDataSet1.CommandText := 'SELECT * FROM [USER]';
ClientDataSet1.Active := True;
except
Statusbar1.Panels[1].Text:= 'Hata Oluştu Lütfen Daha Sonra Tekrar Deneyiniz!';
end;
end;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Program files yazma izni

Mesaj gönderen xxxjedixxx »

Neden ayrıca bir DataSet kullanıyorsun? SQLQuery'de bir datasettir.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  with SQLQuery1 do
  begin
    Active := False;
    Sql.Text := 'Insert Into USER (KULLANICIADI, KULLANICISIFRE) Values (:Kadi, :KadiSif)';
    ParamByName('Kadi').AsString:= Edit1.Text;
    ParamByName('KadiSif').AsString:= Edit2.Text;
    ExecSQL;

    // SQL cümlemizi yollayalım...
    Active := False;
    Sql.Text := 'SELECT * FROM [USER]';
    Active := True;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.DataSource := DataSource1;
  DataSource1.DataSet := SQLQuery1;
  SQLConnection1.Params.Values['Database'] := ExtractFilePath(Application.ExeName) + 'Database\MyDatabase.db';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SQLConnection1.Connected := False;
  try
    SQLConnection1.Connected := True;
    Statusbar1.Panels[1].Text := 'Database İle Bağlantı Sağlandı!';

    // SQL cümlemizi yollayalım...
    SQLQuery1.Active := False;
    SQLQuery1.SQL.Text := 'SELECT * FROM [USER]';
    SQLQuery1.Active := True;
  except
    Statusbar1.Panels[1].Text:= 'Hata Oluştu Lütfen Daha Sonra Tekrar Deneyiniz!';
  end;
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Program files yazma izni

Mesaj gönderen Lord_Ares »

program file yazma mecburiyetin varsa fikir olarak şunu önerebilirim. Basitçe bir bat dosyası oluştur, gerektiği anda delphi den bunu çağırarak gerekli ( bir sefere mahsus ilk kurulumda ve çalışmada ) klasöre gerekli izni vermesini sağlayabilrsin Örnek bat dosyaları internette mecvut.
Bu sadece son çare olarak fikirdir.
Kolay gelsin.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Program files yazma izni

Mesaj gönderen brs »

mussimsek yazdı:Merhaba,

Veritabanını kullanıcının yazma yetkisi olan bir yere koymanız lazım. Bu iş için windows'un belirlediği klasörler var. Users klasörü altındaydı sanırım ama dökümanlara bakmak lazım...

Kolay gelsin.


(Database=C:\Users\A Plus\Database\MyDatabase.db) yap kesin olur
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Program files yazma izni

Mesaj gönderen xozcanx »

Evet alternatifler verilmiş, belirtmiş olduğunuz problemi tüm makinalarda yaşayacağınızı zannetmiyorum doğrusu, yaşanırsa ya sistem yönetisici tarafından engellenmiştir Program Files üzerine dosya yazmak yada işletim sistemi zarar görmüştür(virüs vs).
Kolay gelsin.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Program files yazma izni

Mesaj gönderen hido »

xozcanx yazdı:Evet alternatifler verilmiş, belirtmiş olduğunuz problemi tüm makinalarda yaşayacağınızı zannetmiyorum doğrusu, yaşanırsa ya sistem yönetisici tarafından engellenmiştir Program Files üzerine dosya yazmak yada işletim sistemi zarar görmüştür(virüs vs).
Kolay gelsin.

Emeği gecen herkese teşekkür ederim, bu arada bilgisayara format atamanın da zamanı gelmişti, kullanıcıya uyarı vermesi amacıyla

begin
with SQLQuery1 do
try
Active := False;
Sql.Text := 'Insert Into USER (KULLANICIADI, KULLANICISIFRE) Values (:Kadi, :KadiSif)';
ParamByName('Kadi').AsString:= Edit1.Text;
ParamByName('KadiSif').AsString:= Edit2.Text;
ExecSQL;
except
Statusbar1.Panels[1].Text:= 'Hata Oluştu (C:\Program Files) klasörüne tam yetki veriniz!';
end;
end;

Gibi bir uyarı vererek kullanıcıya bilgilendirmeyi düşünüyorum....
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Program files yazma izni

Mesaj gönderen warder »

ProgramFiles dışından erişim ilginizi çektiyse eğer...
SHGetFolderPath fonksiyonunu msdn de araştırdığınızda sistemdeki tüm yollara global erişimi sağlarsınız.
C++Builder ile aşağıdaki gibi kullanıyorum... Delphicesi size kalmış..
http://msdn.microsoft.com/en-us/library ... s.85).aspx
http://msdn.microsoft.com/en-us/library ... s.85).aspx

Kod: Tümünü seç

void __fastcall TFrmAna::FormCreate(TObject *Sender)
{
	TCHAR szPath[MAX_PATH];
	if(SUCCEEDED(SHGetFolderPath(NULL,
								 CSIDL_COMMON_APPDATA|CSIDL_FLAG_CREATE,
								 NULL,
								 0,
								 szPath
								 ))) {
		gusAdres = String(szPath) + "\\istenenKlasorAdi\\";
	}
......// gusAdres global UnicodeString tanımlı...
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Cevapla