2011-07-26 11 views
8

Tôi cần tạo một exe sẽ được bắt đầu từ một chia sẻ máy chủ Windows. Ngay sau khi ứng dụng đang chạy nó sẽ biến mất khỏi các máy chủ mở danh sách tập tin.Cách tạo exe được lấy ra khỏi máy chủ khi mở danh sách tệp khi chạy (bắt đầu từ một phần)

Ví dụ tôi có nguồn Delphi đơn giản này làm thử nghiệm - nó biên dịch thành tệp exe 28k nhỏ mà chỉ cần đợi đầu vào của người dùng khi được gọi. Trong khi ứng dụng đang chạy nó xuất hiện trên các máy chủ mở danh sách tập tin. Tôi đã cố gắng PEFlags thiết IMAGE_FILE_NET_RUN_FROM_SWAP và IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP:

program RunFromShare; 
Uses 
    Windows; 

{$APPTYPE CONSOLE} 

{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP} // no exe file open on network share? 
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP} 

begin 
    WriteLn('Waiting for [Enter] key'); 
    ReadLn; 
end. 
+3

Tôi thực sự không thích các chương trình mà cố gắng để che giấu bản thân ... –

+0

@Marjan Venema, điều này sẽ là một ứng dụng khay bắt đầu từ một chia sẻ máy chủ. Sau khi ứng dụng được bắt đầu, tất nhiên sẽ xuất hiện trong danh sách quy trình của ứng dụng khách. Nhưng tôi thực sự không thích 300 Khách hàng vẫn có kết nối với máy chủ mở đặc biệt là khi tôi cần cập nhật ứng dụng khách của mình. –

+0

Ok, đã hiểu và cảm ơn lời giải thích. Bây giờ có hình ảnh tốt hơn rất nhiều trong đầu của tôi ... –

Trả lời

1

Nó có vẻ như IMAGE_FILE_NET_RUN_FROM_SWAP (hoặc IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP) cho Windows mà nó phải tải toàn bộ EXE vào bộ nhớ (được hỗ trợ bởi các tập tin hoán đổi). Điều này không có nghĩa là nó được sao chép và sau đó chạy từ đĩa địa phương, nó chỉ ngăn chặn lỗi trang xảy ra sau đó gây ra quyền truy cập vào phần (có thể sau khi tháo dỡ; xem trường hợp như vậy here). Điều này có nghĩa là, tệp trên mạng chia sẻ vẫn mở miễn là phần được chia sẻ và tệp đang chạy.

MSDN says this về IMAGE_FILE_NET_RUN_FROM_SWAP:

Nếu hình ảnh là trên Net, sao chép và chạy từ tập tin hoán đổi.

tôi sẽ giải thích bản sao như bản sao vào bộ nhớ, không phải là bản sao vào đĩa.

Vì vậy, nếu không ai làm công việc cho bạn chỉ làm điều đó tự hỏi: sao chép tập tin của bạn và chạy nó :)

+0

Tôi với bạn về việc giải thích các tài liệu MSDN, nhưng tôi đã tìm kiếm một phương tiện để cắt kết nối cuối cùng này để chia sẻ (hoặc lý do tại sao kết nối vẫn còn mở). Tôi đã thử mọi thứ như CloseHandle (Application.Module). Việc sao chép bản thân tôi sẽ làm việc, nhưng nó làm tăng thêm một số biến chứng: tôi cần sao chép các tập tin tham số, tôi phải tìm một nơi thích hợp để sao chép các tập tin (ngay cả đối với người dùng có quyền hạn chế). được giải quyết, nhưng tôi muốn sử dụng các tính năng hệ điều hành đầu tiên trước khi thử cách giải quyết ;-) –

+0

Đúng, âm thanh có thể giải quyết được. Nhận thư mục đúng thông qua 'SHGetKnownFolderPath' với (ví dụ) thư mục ID' FOLDERID_LocalAppData' và sao chép các tệp exe và cấu hình ở đó. Hoặc chuyển cấu hình thông qua tham số dòng lệnh. Tuy nhiên, cấu hình người dùng phải được lưu trữ cục bộ. Và liên quan đến việc xử lý: trên máy tính của tôi không có xử lý mở cho một tập tin exe bắt đầu từ mạng chia sẻ (ít nhất là Process Explorer nói như vậy). Có lẽ máy chủ có bàn tay trên tập tin - trong trường hợp này bạn không thể làm bất cứ điều gì anyway. Bạn sẽ phải giải quyết nó ở phía máy chủ. –

Các vấn đề liên quan