質問するログイン新規登録
.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

871閲覧

WPF 実行exe以外の、不要なファイルをフォルダにまとめたい

nodoita

総合スコア7

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2023/07/14 09:00

0

0

お世話になります。
調べたのですが、分からないため教えてください。

実現したいこと

実行するexeのみを外に出して、
関係ないファイルをフォルダにまとめて、勝手に触らせないようにしたい
(dll等のファイルをまとめてフォルダに入れたい)

現状

以下画像のようなフォルダ構成になります。
イメージ説明
デバッグすると、binフォルダの中の
「」というフォルダの中に以下のようなフォルダ構成になります。

希望の構成

◆理想1:Otherフォルダにdll等をまとめる
イメージ説明
→ちゃんと動作するかが心配

◆理想2:RectMapフォルダにまとめ、外側のexeから実行させる
イメージ説明

試したこと

理想2を作ろうとしました。

exeと同階層にあるファイルをサブフォルダにまとめたい
https://qiita.com/wifrstfasnriov/questions/3e72b380ab9e70c6a730

  1. フォームアプリの新規プロジェクト「appX_launcher」を作成
  2. Form1.csやForm1.designer.csを削除してソースファイルはProgram.csだけにする。
  3. Programe.csのMain()に、サブフォルダのappX.exeを起動する処理を書く
    (相対パス指定も可能だが、ランチャー自身の実行パス情報を基準にした絶対パスに変換した方が確実)
    (作業ディレクトリを指定するにはProcessStartInfoで設定する必要あり)
  4. appX.exeを起動させたらランチャーは終了させれば、ユーザー視点ではショートカットとほぼ変わらない

ソースコードの中身の部分はせいぜい10行前後くらいでしょうし、アイコンも自分で設定できます。

上記を参考に、WPFにて対応しました。

1.RectMapのソリューション内に別プロジェクト「RectMapStart」を作成。
2.App.xaml の「StartupUri」を削除
3.以下のように記載

cs

1 //Processオブジェクトを作成する 2 System.Diagnostics.Process p = new System.Diagnostics.Process(); 3 //起動する実行ファイルのパスを設定する 4 var FilePath= System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RectMap\\RectMap.exe"); 5 p.StartInfo.FileName = FilePath; 6 //起動する。プロセスが起動した時はTrueを返す。 7 bool result = p.Start();

できないこと

イメージ説明
1.デバッグの時にできるフォルダが「net6.0-windows」になる
→他の名称に変えたい
デバッグ時前のコマンドとかを入れたら自動で変えられそうですが
どうしたら良いものか…。

2.RectMapStart.exeからRectMap.exeを起動させたい
(ソリューション内にプロジェクト2つ入れてどうやるのか)
RectMapStartのプロジェクトのビルド時基本出力パスを
「C:\Users\NowUser\source\repos\RectMap\bin」
にしたところ、binのnet6.0-windowsの中にRectMapStart.exeが出来ました。
net6.0-windowsの外側に出したいけれど、どうしたら良いか分かりません…。

3.この方法で何か問題が出るでしょうか?
実際に実行させたいのはRectMap.exeなので、
それのショートカットのような形でもいいのですが
上手く動かなかったときが怖いと思いこのようなやり方を検討しています。

回答よろしくお願いいたします!

補足情報(FW/ツールのバージョンなど)

Visualstudio2022 V17.6.3
.NET 6.0 C#

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

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

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

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

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

TN8001

2023/07/14 10:06

手動でRectMapStart.exeを移動させるんじゃダメですか? 方法はあると思うんですが(配る用にまとめてzipにするにしろ自分で使うだけにしろ)1回やるだけですし、それで十分じゃないですかね。
guest

回答1

0

ベストアンサー

提示参考リンクはマルチポストで、わたしもteratail側で回答しています。
【Visual Studio】発行時にexe以外のファイルをフォルダにまとめてしまいたい。
[Q&A] exeと同階層にあるファイルをサブフォルダにまとめたい - Qiita

質問者は.NET(Core)で自己完結のアプリケーションの発行をした場合(ただしなぜか単一ファイルはイヤ)の話です(わかっていない回答やコメントがあるので混乱があります)
アプリケーションの発行 - .NET | Microsoft Learn

nodoitaさんの場合はフレームワーク依存(自己完結でもいいけど)で単一ファイルの発行をするのが、お求めのものではないかと思います。
アプリケーション配置用に単一ファイルを作成する - .NET | Microsoft Learn

余談: 私がNativeAOTに言及しているのは、自己完結(.NET Runtimeがなくても動く)が前提だからです。


以下必要ないと(私は)思っているが回答

1.デバッグの時にできるフォルダが「net6.0-windows」になる
→他の名称に変えたい

↓を設定したうえで出力パスを好きに変えてください。

xml

1<PropertyGroup> 2 <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> 3 <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> 4</PropertyGroup>

ビルド出力ディレクトリを変更する - Visual Studio (Windows) | Microsoft Learn

「net6.0-windows」が邪魔くさいというだけなら新機能があります(私はまだ試してません^^;
.NET 8 の新機能 | Microsoft Learn

2.RectMapStart.exeからRectMap.exeを起動させたい

同上

3.この方法で何か問題が出るでしょうか?

RectMapの単一ファイルがベストです。

相対パスのショートカットはやや気持ち悪さがあります。

ランチャーは.NETで作ると(WPFの必要はありません。コンソールアプリで十分です)結局.dllや.jsonができてしまいます(こっちは.NET Framework?単一ファイル?なんか本末転倒感が^^;

投稿2023/07/15 21:55

TN8001

総合スコア10166

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

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

TN8001

2023/07/15 21:55

> 手動でRectMapStart.exeを移動させるんじゃダメですか? というのはRectMapStart.exeを、 "C:\Users\User\Source\Repos\RectMap\RectMap\bin\Release\net6.0-windows\" に「ポイっとすりゃいいんじゃないですか?」って意味です。 RectMapStartは一回作ったら変更する余地もないですし、binを削除したりしなければ消えることもありません。 net6.0-windowsをRectMapにリネームして丸ごとzipするだけです(そんなに手間でもないと思うのですが... それともCI/CDも念頭にありますか?
nodoita

2023/07/18 00:40

回答ありがとうございます。 RectMapStart.exeをRectMapの1つ上のフォルダに手動で移動させても動かないのです。 動かないため何が間違っているのかも判断がつかず手付かずな状態です……。 すみません、CI/CDは良く分かっていないのですが RectMapStartを作り、それを実行すれば動作すれば問題ないです。 >RectMapの単一ファイルがベストです。 プロジェクトを右クリックして発行を押し、 単一ファイルとして出力してみました。 publishに出力されましたが、確か別パソコンだとインストール画面が表示された気がするのです。 できればインストール画面等は出さずにそのまま動作させたいと思っています。 今は何か変わっているのかもしれないので試してみます!
TN8001

2023/07/18 04:39

> RectMapStart.exeをRectMapの1つ上のフォルダに手動で移動させても動かないのです。 あぁProcess.Startできてないって話なんですね。。。 > 確か別パソコンだとインストール画面が表示された気がするのです。 「フレームワーク依存」で発行すると、ランタイムが入っていないPCでは入れろって画面が出ると思います。 「自己完結」なら出ないですが、サイズがすごく大きくなります。 もしランタイムが入っていないPCに持っていくなら、普通のexe(発行じゃなくbin\net6.0-windows以下のexe)も動かないんじゃないかと思います。
nodoita

2024/05/24 04:50

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問