Program icinden exe cagirmak ve return kodunu okumak

Başlatan z, 26 Eylül 2014, 05:39:56

z

Yazacagim program isini bitirip yok olurken hata kodu ile cikiyor.

.Net ile program yazan arkadaslar benim yazacagim Delphi programi .NET icinden cagirdiklarinda;

1) Delphi program sonlanirken uretecegi cikis kodunu .NET program ogrenebilirmi?

2) Delphi program cikmadan hemen once diskte bir dosya olusturacak ve cikacak.

Bu esnada program ciktiginda isletim sistemi belki de hala diskte veri olusturmaya devam edecek.
.Net program HDD de olusturulacak dosyanin ismini gordugu halde daha ici tam olusmamis olabilir. (W98 zamaninda basima gelmisti yeni isletim sistemlerinde hala bu durum varmi bilmiyorum)

.NET program Diskte olusmakta olan programi okumak isterse fakat henuz dosyanin icerigi isletim sistemi tarafindan tamamen doldurulmadiysa buna nasil bir cozum getirilebilir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Kabil ATICI

#1
Yöntem_1:
Dosya örneğin "calis1.aaa" uzantısı ile oluşturulmaya başlanır, işlem tamamlandıktan sonra dosya uzantısı "calis.bbb" şeklinde değiştirilir. Böylece bu dosyayı görecek olan program sadece "calis.bbb" isimli dosyayı görecek şekilde ayarlandığında zaten sorun kalmaz.
Yöntem_2:
Dosya oluşturulurken ilk satıra doğrudan "Bekle" diye bir satır eklenir, bu dosyayı okuyacak program bu satırı okuduğunda işlem yapmaz, tüm yazma işleminden sonra ilk satır "Hazır" diye değişirilir veya eklenir. Buna göre bu dosyayı okuması gereken program okuma işlemini gerçekleştirir.
Yöntem_3:
İni mantığı ile gidilebilir. Ortak bir ini dosyası oluşturulur.Yazacak program ini dosyasında uygun bir değişkeni işlem sonunda değiştirir veya ekler.Görecek olan program bu değişkeni görünce  dosyasını okur.
(Aynı işlem registry üzerinden de yürütülebilir.)
ambar7

anon

process cagirma, process'ten return alma isleri icin asagidaki link isinize yarar.

http://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx

ortak calisilan dosya okuma yazma isleri icinde `filestream` anahtar kelime, biraz arastirirsaniz bu kutuphaneleri sorununuz hallolur. hepsinin onlemi var artik .net kutuphanelerinde. onemli olan mantigi kurmak.

Burak B

Dosya yazma işlemi dosya kapatılırken tamamlanır. Bu nedenle bir dosya açılmışsa ve kapatılmadan çıkılmışsa içeriği boş olabilir.

1- Win32 CreateProccess ve GetExitCodeProcess API fonksiyonlarına bir bakın. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx

2- Dosya oluşturup çıkabilir ancak dosyayı kapatmazsa içeriği yazılmayacaktır. Bunun için IPC yöntemleri ile DuplicateHandle API fonksiyonu kullanılarak dosya handle bilgisi .NET programına aktarılması gerekir. Böylece dosyanın yönetimi .NET programına geçer.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle