inno setupで excelが起動してたら止める

issに以下記述

;excel起動してたら終了
[Code]
function IsAppRunning(const FileName: string): Boolean;
var
  FWMIService: Variant;
  FSWbemLocator: Variant;
  FWbemObjectSet: Variant;
begin
  Result := false;
  FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
  FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
  FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name="%s"',[FileName]));
  Result := (FWbemObjectSet.Count > 0);
  FWbemObjectSet := Unassigned;
  FWMIService := Unassigned;
  FSWbemLocator := Unassigned;
end;

function InitializeSetup: boolean;
begin
  Result := not IsAppRunning('excel.exe');
  if not Result then
  MsgBox('excel.exe が起動しています。 Excelを終了させてから再度お試し下さい。', mbError, MB_OK);
end;

excelvbaでJST(日本時間)をミリ秒単位で取得

#If Win64 Then
Private Declare PtrSafe Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
#Else
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
#End If

Private Function GetLocalTime() As String
    Dim t   As SYSTEMTIME
    Dim s
    
    ' 現在日時取得
    Call GetSystemTime(t)
    
    Dim JSTDateTime As Date
    JSTDateTime = CDate(Format(t.wYear, "0000") & "/" & Format(t.wMonth, "00") & "/" & Format(t.wDay, "00") _
                & " " & Format(t.wHour, "00") & ":" & Format(t.wMinute, "00") & ":" & Format(t.wSecond, "00"))
    JSTDateTime = JSTDateTime + TimeValue("9:00:00")
    
    GetLocalTime = Format(JSTDateTime, "yyyy/mm/dd hh:mm:ss")
    GetLocalTime = GetLocalTime + "." + Format(t.wMilliseconds, "000")
    
End Function

inno setupでインストーラーとアンインストーラーに署名する

inno script studio使う。

inno内の署名処理は以下のように追加し、コンパイル時にインストーラーとアンインストーラーへそれぞれ署名が行われるようにする。

・innoのルートフォルダ(C:\Program Files (x86)\Inno Setup 6)に「pfx\hoge.pfx」という形で証明書を保存

・inno script studioの「Tools」タブをクリック
・Configure Sign Tools... をクリック
・Addをクリック

・Nameに「hogesignTool」、Commandに以下を設定してOKをクリック
 「"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool" sign /q /f "C:\Program Files (x86)\Inno Setup 6\pfx\hoge.pfx" /p ${パスワード} $f」

・innoのソースの[Setup]セクションに以下を追加
 SignTool=hogesignTool
 SignedUninstaller=yes

VC++ MFCでディレクトリ内のファイル一覧を取得する

#include "atlpath.h"
BOOL GetFileList(CString path,CStringArray* outArray)
{
	// ファイル検索を開始します。
	CFileFind fileFind;
	BOOL bResult = fileFind.FindFile(path);

	// ファイル検索ができない場合、終了します。
	if (!bResult) return FALSE;

	// ファイルが検索できる間繰り返します。
	do
	{
		// ファイルを検索します。
		// 次のファイル・ディレクトリがない場合、FALSEが返却されます。
		bResult = fileFind.FindNextFile();

		// "."または".."の場合、次を検索します。
		if (fileFind.IsDots()) continue;

		// 検索した結果がディレクトリの場合
		CString msg;
		CString filePath = fileFind.GetFilePath();
		if (fileFind.IsDirectory() && bsaiki )
		{
			// サブディレクトリを検索する場合、再帰呼出しします。
			CPath subDir = filePath;
			// ディレクトリ内のすべてのファイル・ディレクトリを対象とするため
			// ワイルドカード"*"を指定します。
			subDir.Append(_T("*"));
			GetFileList(subDir, outArray);
		}

		// ファイルの場合
		else
		{
			outArray->Add(filePath);
		}
	} while (bResult);

	return TRUE;
}