Domanda

Ho un problema particolare, ho qualche programma che non posso modificare, ma che fornisce alcune funzionalità Mi piacerebbe usare ufficio all'interno. Così sto scrivendo un plugin per Office che prende il mio documento, esegue il programma sullo sfondo, mette il documento sul stdin. Il programma scrive al stdout, e mi prendo che indietro al mio programma per processo di post che.

Questa tutte le opere bene, tranne che il programma richiede una password che non voglio mettere su stdin. Lo strumento ha un modo di leggere la password da qualsiasi altro flusso di input, ma ha bisogno del numero del file-descrittore dovrebbe leggere.

Quindi ecco la mia domanda: come faccio (all'interno dell'ambiente .net) aprire un flusso su un descrittore di file con un numero che posso dare come parametro per questo programma? Idealmente voglio scrivere qualcosa del tipo:

process.start("start-program --password-fd " + x);
stream = new StreamWriter(x);
stream.write("secritpwd");

ect .. (ma poi magicamente corretto in modo da funzionare;))

Spero che qualcuno mi può aiutare.

Grazie

È stato utile?

Soluzione

Non sono sicuro di quello che significa questa app "descrittore di file", ma si può essere in grado di passare il manico di un tubo anonima ereditabile. Vedere AnonymousPipeServerStream . (Premesso che sei in almeno NET 3.5.)

Lo schema di base sarebbe qualcosa di simile:

  • istanziare un AnonymousPipeServerStream.
  • Far passare il manico del tubo (pipeServer.GetClientHandleAsString()) come un parametro di riga di comando per l'eseguibile C.
  • Scrivi alla AnonymousPipeServerStream.

Altri suggerimenti

descrittori di file non sono parte di Windows - che parte della libreria di runtime C sono. Si dovrà scrivere un DLL in C o C ++ per fare il vostro file di I / O, quindi chiamare dal vostro programma C #. Prendi il numero di descrittore di file dalla DLL C per passare al tuo altro codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top