Çalışan bir yürütülebilir dosyayı neden yeniden adlandırabilirim, ancak silemiyorum?


12

Her şey başlıkta, ancak daha resmi olarak:

Windows neden çalışan bir yürütülebilir dosyayı yeniden adlandırmama izin veriyor, ancak onu silmiyor?

Yanıtlar:


12

Gerçekten bir dosyayı yeniden adlandırma diye bir şey yoktur. Bir dosyanın birden fazla adı olabilir veya adı olmayabilir, bu nedenle yeniden adlandırdığınız dosya değil, dizin girişi olur. Yeniden adlandırma, dizin girişinde, dosyanın yürütme için kilitli olmasından etkilenmeyen bir işlemdir.


2
Hmm, neden okuma veya yazma için açık olan normal bir dosyayı yeniden adlandırma denemesi başarısız oluyor?
Serge

5
@Serge: Dosyayı açan işlem, uygun açık bayrakları ayarlayarak özellikle başarısız olmasını istedi.
David Schwartz

hangi özel açık bayraklar?
n611x007

2
Büyük olasılıkla, dwShareModesıfıra ayarlamak veya OF_SHARE_COMPATveya OF_SHARE_EXCLUSIVEbayraklarını kullanmak.
David Schwartz

6

Yürütülebilir dosyanın ve DLL'lerin silinmesine izin vermez, çünkü Windows yürütülebilir dosyaların parçalarını işlem oluşturmanın bir parçası olarak belleğe eşler, bu nedenle işlemin ömrü boyunca dosyaya ihtiyaç duyar.

Ne yazık ki hala bu dosyaları yeniden adlandırmaya izin neden gerçek bir neden yok. Bu hizmet kesintisi süresini en aza indirmek için çalışırken dll ve exe dosyalarının güncelleştirilmesini etkinleştirmek için yapılır sanırım.

Bunun aksine, linux (genel olarak unix) yürütülebilir bir dosyayı çalışırken siler:

tmp]$ cp /usr/bin/md5sum .;ll md5*; \
(./md5sum /home/pub/iso/FC5/FC-5-i386-DVD.iso & ); \
rm md5sum ; ll md5*;ps -f
-rwxr-xr-x 1 sergey sergey 37276 Oct 16 02:38 md5sum
ls: cannot access md5*: No such file or directory
UID        PID  PPID  C STIME TTY          TIME CMD
sergey    2423  2422  0 02:32 pts/1    00:00:00 -bash
sergey    2533     1  0 02:38 pts/1    00:00:00 ./md5sum /home/pub/iso/FC5/FC-5-
sergey    2536  2423  0 02:38 pts/1    00:00:00 ps -f

Örneğin Linux'un yürütülebilir dosyaların bazı bölümlerini belleğe eşlediğini, ancak çalışan bir yürütülebilir dosyayı silmenize izin veren bir sorunu olmadığını unutmayın.
ChrisInEdmonton

2
@ChrisInEdmonton Evet, ama bunu burada açıkladım: unix.stackexchange.com/questions/49299/…
Serge

Serge, orada güzel bir açıklama. :)
ChrisInEdmonton

Linux yürütülürken bir dosyayı silmenize izin vermez. Ancak, dizin girişlerini kaldırabilirsiniz, çünkü bunlar yürütülmemektedir.
David Schwartz

@DavidSchwartz lütfen cevabımın güncellemesine bakın. Linux, o dosyayı silmek için yeterli iznim olması koşuluyla yürütülen herhangi bir dosyanın bağlantısını kaldırmama izin veriyor.
Serge

2

Sanırım bir isim sadece dosyanın aynı ikili içeriğinin bir özniteliği, veri olduğu sürece, çalışan işlem tarafından tutulan tutamacı değişmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.