|
■No47128 (hs さん) に返信
> 仮にデスクトップに My.Resources.[外部アプリ.msi] My.Resources.[外部アプリ.exe] をコピーする場合、
> IO.File.Copy(My.Resources.[外部アプリmsi]のパス,"C:\Users\ユーザー名\Desktop\外部アプリ.msi")
> IO.File.Copy(My.Resources.[外部アプリexe]のパス,"C:\Users\ユーザー名\Desktop\外部アプリ.exe")
> としないとコピーはできません。
『My.Resources.[外部アプリexe]のパス』が何を返すのか、にもよりますが:
My.Resources.外部アプリexe が、exe ファイルの「バイナリ」を返すのであれば、
それを File.WriteAllBytes でファイルとして吐き出せるかと思います。
My.Resources.外部アプリexe が、exe ファイルの場所を示している場合、
それが URL であれば、いったんダウンロードさせる必要がありますし、
それがローカルHDD 上のパスであれば、それをそのまま利用できるかと。
> やりたい事、プロジェクト内に [外部アプリ.msi].[外部アプリ.exe] をどこかに格納しておき、アプリからこれらをShell関数を使って起動させたい。
今回の要件を満たせるかどうかは別として……それが .NET なアセンブリであれば、モノによっては
バイナリデータを直接実行できる可能性があります。起動手順が Shell では無くなってしまいますが。
Imports System.Reflection
Module Module1
Sub Main()
Dim bin() As Byte = My.Resources.EXEファイルのバイナリ
Dim r As Assembly = Assembly.Load(bin, Nothing)
r.EntryPoint.Invoke(r, BindingFlags.Default, Nothing, Nothing, Nothing)
End Sub
End Module
# bin の内容:以下のコンソールアプリの EXE
---------
using System;
class a{static void Main(){
decimal[] x = {1.0M, 1.00m, Decimal.Parse("1.000") };
Array.ForEach(x, Console.WriteLine);
}}
---------
|