質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1006閲覧

追加のソフトウェアをインストールなしで.exeに含める方法が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/07/31 07:26

提示コードですが以下の///部の内部で.gswin64c.exeが必要で自分はghostscriptを環境にインストールしたのですがこのソフトを配布したいので外部のソフトウェアをインストールしないで.exeに含めたいのですがこれをするにはどうしたらいいのでしょうか?

cs

1using System; 2using System.IO; 3using System.Collections.Generic; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.Diagnostics; 8 9public class FileData 10{ 11 12 public string? extension; //拡張子 13 public bool isCheck = true; //チェック状態 14 public string inputFilePath; //ファイルパス 15 public string? saveFolderPath; //セーブフォルダパス 16 public string fileName; //ファイル名 17 18 19 20 protected string? getSavePath() 21 { 22 if (saveFolderPath == null) 23 { 24 return null; 25 } 26 else 27 { 28 string name = Path.ChangeExtension(fileName, extension); 29 string path = saveFolderPath + "\\" + name; 30 31 return path; 32 } 33 } 34} 35 36public class Image_Data : FileData 37{ 38 private ImageMagick.MagickImage image; 39 40 public Image_Data(string path) 41 { 42 inputFilePath = path; 43 fileName = Path.GetFileName(path); 44 image = new ImageMagick.MagickImage(path); 45 } 46 47 public void Generate() 48 { 49 image.Write(getSavePath()); 50 } 51 52 public static void Build_PDF(List<ImageMagick.MagickImage> list,string savePath) 53 { 54 ImageMagick.MagickImageCollection build = new ImageMagick.MagickImageCollection(); 55 56 foreach(ImageMagick.MagickImage page in list) 57 { 58 build.Add(page); 59 } 60 61 build.Write(savePath); 62 63 build.Dispose(); 64 } 65 66} 67 68public class PDF_Data : FileData 69{ 70 ImageMagick.MagickImageCollection pageList = new ImageMagick.MagickImageCollection(); 71 72 public PDF_Data(string path) 73 { 74 inputFilePath = path; 75 fileName = Path.GetFileName(path); 76 77 try 78 { 79///////////////////////////////////////////////////////////// 80 pageList.Read(path); //読み込み 81///////////////////////////////////////////////////////////// 82 }catch(ImageMagick.MagickException e) 83 { 84 Console.WriteLine(e.Message); 85 } 86 } 87 88 public void Generate() 89 { 90 int number = 0; 91 foreach(ImageMagick.MagickImage page in pageList) 92 { 93 string path = saveFolderPath + "\\"+fileName+ extension +" "+ number; 94 page.Write(path); 95 96 number++; 97 } 98 } 99 100 101 ~PDF_Data() 102 { 103 pageList.Dispose(); 104 } 105 106} 107 108public class Program 109{ 110 public static void Main() 111 { 112 Console.WriteLine("ファイルパス: "); 113 string path = "C:\\Users\\yw325\\Desktop\\output.pdf"; 114 115 Console.WriteLine("保存ディレクトリパス: "); 116 string save = "C:\\Users\\yw325\\Desktop\\新しいフォルダー"; 117 118 PDF_Data pdf = new PDF_Data(path); 119 120 pdf.saveFolderPath = save; 121 pdf.extension = ".jpeg"; 122 123 pdf.Generate(); 124 125 //GhostscriptPipedOutput gsPipedOutput = new GhostscriptPipedOutput(); 126 127 /* 128 ImageMagick.MagickImage img1 = new ImageMagick.MagickImage("input.HEIC"); 129 ImageMagick.MagickImage img2 = new ImageMagick.MagickImage("input.HEIC"); 130 ImageMagick.MagickImage img3 = new ImageMagick.MagickImage("input.HEIC"); 131 132 ImageMagick.MagickImageCollection images = new ImageMagick.MagickImageCollection(); 133 134 images.Add(img1); 135 images.Add(img2); 136 images.Add(img3); 137 138 139 140 images.Write("output.pdf"); 141 142 //img.Dispose(); 143 images.Dispose(); 144 145 Console.WriteLine("終了"); 146 */ 147 //Console.ReadKey(); 148 } 149 150} 151

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

リソースに埋め込み実行時に書き出しを行うことで。exeファイルの埋め込みはできますがお勧めしません。
脆弱性の問題や、x86/x64のチェック、exeから呼ばれている他のファイルがないか?等考える要素が多いです。
埋め込みの対象となるであろうGhostscriptのライセンスは選択式で、どのような用途で使われるのかわかりませんが再配布する場合は確認が必要です。

  • サンプルソース
    • 確認環境 Windows 11 + Visual Studio 2022 + .NET Framework 4.8

埋め込み対象のexeファイルのプロパティのビルドアクション埋め込みリソース指定してください。

呼び出し方例

using System; using System.Diagnostics; using System.IO; using System.Reflection; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { var assembly = Assembly.GetExecutingAssembly(); var currentDirectory = Environment.CurrentDirectory; var targetFileName = "helloworld.exe"; var targetResouceName = "ConsoleApp1." + targetFileName; // exeファイル読込。 using (var stream = assembly.GetManifestResourceStream(targetResouceName)) { using (MemoryStream memoryStream = new MemoryStream()) { // カレントディレクトリへ書き出し。 stream.CopyTo(memoryStream); var targetBytes = memoryStream.ToArray(); File.WriteAllBytes(Path.Combine(currentDirectory, targetFileName), targetBytes); } } // 書き出したexe呼び出し確認。 using (Process process = new Process()) { process.StartInfo.FileName = targetFileName; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); // Synchronously read the standard output of the spawned process. StreamReader reader = process.StandardOutput; string output = reader.ReadToEnd(); // Write the redirected output to this application's window. Console.WriteLine(output); process.WaitForExit(); } Console.ReadKey(); } } }

投稿2022/07/31 14:07

umed0025

総合スコア851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/08/01 01:21

質問ですがAPIを使う場合はまた別でしょうか?
guest

0

外部のソフトウェアをインストールしないで.exeに含めたいのですがこれをするにはどうしたらいいのでしょうか?

それは無理です
そのファイルを添付して配布する、か、インストーラファイルを作ってその中に必要なファイルを含ませる、か、ですね。

それよりも、その添付しようとしているプログラムはライセンス的に配布していいものなんでしょうか

投稿2022/07/31 08:01

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問