12

Tôi đang tạo ứng dụng bảng điều khiển trong C#, trong đó, khi thực thi, nó được chuyển một loạt dữ liệu. Ba trong số đó là các chuỗi ngắn, chẳng hạn như tên người dùng, mật khẩu, vv Tuy nhiên, một trong số chúng là một tài liệu XML khá dài.Truyền chuỗi dài (làm đối số) vào ứng dụng bảng điều khiển

Chuỗi có thể kéo dài bao lâu, khi chuyển chúng thành các đối số dòng lệnh?

Có lựa chọn thay thế nào tốt hơn để chuyển dữ liệu đến ứng dụng giao diện điều khiển C# khi thực thi không?

+4

Lưu trữ dữ liệu XML trong một tệp và chỉ chuyển filepath đến công cụ dòng lệnh làm đối số. – nemesv

+3

Hoặc vượt qua xml thông qua đầu vào tiêu chuẩn. Bất kể, câu hỏi hay. – orip

Trả lời

16

Tìm thấy here following về hạn chế:

  • Các dòng lệnh dài tối đa cho hàm CreateProcess là 32767 ký tự. Giới hạn này xuất phát từ cấu trúc UNICODE_STRING .

  • CreateProcess là chức năng cốt lõi để tạo quy trình, vì vậy nếu bạn đang nói trực tiếp với Win32, thì đó là giới hạn duy nhất bạn phải lo lắng. Nhưng nếu bạn đang tiếp cận CreateProcess bằng một số phương thức khác thì đường dẫn bạn đi qua có thể có các giới hạn khác.

  • Nếu bạn đang sử dụng bộ xử lý lệnh CMD.EXE, thì bạn cũng là tùy thuộc vào giới hạn độ dài dòng lệnh ký tự 8192 áp đặt bởi CMD.EXE.

  • Nếu bạn đang sử dụng chức năng ShellExecute/Ex, sau đó bạn trở thành chịu sự INTERNET_MAX_URL_LENGTH (khoảng 2048) dòng lệnh giới hạn chiều dài áp đặt bởi các chức năng ShellExecute/Ex. (Nếu bạn là chạy trên Windows 95, sau đó giới hạn là chỉ MAX_PATH.)

gì cách tốt hơn hoặc thay thế - tập tin sử dụng, có lẽ XML, với tất cả các thông số của bạn ở đó, và vượt qua tập tin này như dòng lệnh tranh luận.

3

Nếu XML là đầu vào chính của chương trình của bạn, thì tôi khuyên bạn nên đọc nó từ đầu vào tiêu chuẩn thay vì làm đối số dòng lệnh (có vẻ như không bình thường trong trường hợp này). Điều này sẽ cung cấp cho người dùng của ba chương trình của bạn cách để đi qua trong XML:

  • thực hiện chương trình của bạn, và tự gõ vào tập tin XML
  • sử dụng đầu ra của chương trình khác: other_program … | program …
  • chuyển hướng đầu vào tiêu chuẩn từ một tập tin : program … < input.xml

Nếu XML, tuy nhiên, không phải là đầu vào chính, tôi muốn đưa ra một chuyển đổi dòng lệnh để xác định một tên tập tin đầu vào; mang đến cho bạn một cách để xác định XML:

  • xác định tập tin đầu vào thông qua tham số: program ... -f input.xml

Ngoài lời khuyên này, tôi không thể trả lời câu hỏi thực tế của bạn một cách chính xác, nhưng tôi đã nhận thấy trong quá khứ rằng Windows 'cmd.exe (IIRC trong Windows 2000 hoặc XP) là khá hạn chế đối với độ dài tối đa của lệnh.

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