MSIインストーラーで詳細ログを出力する

Memo.

情報源: MSIインストーラーで詳細ログを出力する – Qiita

msiを使ったインストール時にError 1001がダイアログやメッセージボックスとして発生したときに、以下の要領でログを出力させることで、より詳細なエラー原因がわかる場合がある。

> msiexec /i myinstaller.msi /l*v c:\installer.log

詳しいオプションは以下。

https://docs.microsoft.com/en-us/windows/win32/msi/command-line-options

Windows 10 Insider Preview Build 20270

Hello Windows Insiders, today we’re releasing Windows 10 Insider Preview Build 20270 (FE_RELEASE) to Windows Insiders in the Dev Channel.Other updates for InsidersFile Skill in Cortana

情報源: Announcing Windows 10 Insider Preview Build 20270 | Windows Insider Blog

Dev Channnel向け。

ウィンター #Forzathon 12/4~12/11 #ForzaHorizon4

シーズンは日本時間では木曜日23時30分に切り替わります。秋から冬になりました。

正確には12/3 23:30~12/10 23:30まで。

シリーズリワード

  • Horizon Backstage Pass
  • 2013 Jeep Wrangler Unlimited DeBerti Design

シーズンリワード

  • 50% 1990 Nissan Pulsar GTI-R
  • 80% 2017 Aston Martin Vulcan AMR Pro

フォトチャレンジ #OneGiantLeap

The Great Ridgeで任意のExtream Offroadマシンのフォトを撮る。

クリア

Continue reading ウィンター #Forzathon 12/4~12/11 #ForzaHorizon4

OBSOLETE #OBSOLETE

EP7が一般公開、EP12までがYoutube Premiumで先行公開です。ここまででシーズン1という事のようです。ただシーズン2の予告のようなものは無いので続くかどうかはプラモ売れ行き次第なんですかね。特に謎らしい謎はまったく解明されないので、シリーズを続けて欲しいところ。

Windows 10 Insider Preview Build 19042.662 (20H2)

Hello Windows Insiders, today we’re releasing 20H2 Build 19042.662 (KB4586853) to the Beta and Release Preview Channels for those Insiders who are on 20H2 (

情報源: Announcing Windows 10 Insider Preview Build 19042.662 (20H2) | Windows Insider Blog

Beta Channnel / Release Preview Channel向け。基本的にバグ修正。

Beta Channel向けにWindows Feature Experience Pack 120.2212.1070.0リリース

Hello Windows Insiders,We are testing a new process for delivering new feature improvements to our customers outside of major Windows 10 feature updates. Through the Windows Feature Experience Pack, we can improve certain features

情報源: Releasing Windows Feature Experience Pack 120.2212.1070.0 to the Beta Channel | Windows Insider Blog

Beta Channel向け。今後こういう形で機能拡張していきたいのかな?

.NET 5プロジェクトでのCOM参照の追加

Visual Studio 2019 v16.6より.NET CoreプロジェクトでのCOM参照の仕組みが追加されており、Visual Studio 2019 v16.8/.NET 5でもその機能を使うことが出来ます。こういうめんどくさいことはツールサポートが無いとやっていられません。

ここではコンソールアプリからExcelのCOM Automationを使う方法をサンプルとして提示したいと思います。

まず、Visual Studio 2019で.NET 5のコンソールアプリケーションのプロジェクトを作成し、以下のように依存関係のコンテキストメニューから「COM参照の追加」を選択します。

そうすると、見慣れたCOM参照の追加ダイアログが表示されます。

Excelを参照します。そうすると以下のようにinteropアセンブリが追加されます。

ここで大事なのは、このinteropアセンブリを選択して以下のように「ローカルコピー」「相互運用性の埋め込み」の両方を「はい」に設定しておきます。こうしておかないと実行時にSystem.IO.FileNotFoundExceptionのエラーになります。

必要な準備はこれだけです。これでcsprojファイルに以下のようにCOM参照の定義が追加され、必要なinteropアセンブリがプロジェクトに追加されます。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="Microsoft.Office.Excel.dll">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>9</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>00020813-0000-0000-c000-000000000046</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <Private>true</Private>
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </COMReference>
  </ItemGroup>

</Project>

実際にExcelを使うコードは以下のようになりますが、これは.NET Frameworkの時と違いはありません。

using System;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            var excelName = @"C:\temp\sample.xls";
            Console.WriteLine("Hello World!");
            var oXls = new Excel.Application();
            oXls.Visible = true;
            var oWorkbook = oXls.Workbooks.Open(
                excelName,  // オープンするExcelファイル名
                Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3)
                Type.Missing, // (省略可能)ReadOnly (True / False )
                Type.Missing, // (省略可能)Format
                              // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;)
                              // 5:なし / 6:引数 Delimiterで指定された文字
                Type.Missing, // (省略可能)Password
                Type.Missing, // (省略可能)WriteResPassword
                Type.Missing, // (省略可能)IgnoreReadOnlyRecommended
                Type.Missing, // (省略可能)Origin
                Type.Missing, // (省略可能)Delimiter
                Type.Missing, // (省略可能)Editable
                Type.Missing, // (省略可能)Notify
                Type.Missing, // (省略可能)Converter
                Type.Missing, // (省略可能)AddToMru
                Type.Missing, // (省略可能)Local
                Type.Missing  // (省略可能)CorruptLoad
            );
            Console.Write("エンターキーでExcelを閉じる: ");
            Console.ReadLine();
            oWorkbook.Close();
            oXls.Quit();

            // これを忘れてはダメ
#pragma warning disable CA1416 // プラットフォームの互換性の検証
            _ = Marshal.ReleaseComObject(oWorkbook);
            _ = Marshal.ReleaseComObject(oXls);
#pragma warning restore CA1416 // プラットフォームの互換性の検証

            Console.ReadLine();
            
        }
    }
}

参考:

.NET 5 / .NET CoreでCCWしたいときには以下を参照。

No Code, No Life.

%d人のブロガーが「いいね」をつけました。