На самом деле, то, что вы просите, является общей схемой, и здесь есть несколько связанных вопросов и ответов на SO.
В основном то, что вы делаете в общем, следующее:
- найдите соответствующий ресурс и откройте для него поток ресурсов.
- Сохраните поток во (временный) файл, если ваш целевой API не может напрямую обрабатывать потоки или байтовые массивы.
- Выполните любую операцию над файлом или непосредственно над массивом потоков / байтов (как я уже сказал, если поддерживается).
- В конечном итоге удалить временный файл, если он есть, из шага 1.
Итак, вы сначала извлекаете PPT-файл (на самом деле не имеет значения, является ли он PPT-файлом, может быть любым файлом или байтовым блобом)
string tempFile = Path.GetTempFileName();
using (Stream input = assembly.GetManifestResourceStream("MyPresentation.PPT"))
using (Stream output = File.Create(tempFile))
{
input.CopyTo(output); // Stream.CopyTo() is new in .NET 4.0, used for simplicity and illustration purposes.
}
Затем вы открываете его, используя Process.Start()
. Вам не нужно указывать путь к исполняемому файлу Powerpoint, так как PPT должен быть зарегистрированным расширением файла в PowerPoint или PowerPoint Viewer. Если вы оба установили, вы все равно можете указать путь к соответствующему исполняемому файлу, чтобы предотвратить запуск неправильного приложения. Убедитесь, что вы не указали путь жестко, но попытайтесь извлечь его из реестра (или что-то подобное, я не проверял, потому что сейчас он слишком конкретен).
using (var process = Process.Start(tempFile))
{
process.WaitForExit();
// remove temporary file after use
File.Delete(tempFile);
}
Примечание: я упустил довольно много обработки ошибок, которую вы, возможно, захотите добавить в реальное приложение.