0

たとえば、wix コードで宣言されたファイルを参照する方法はありますか。

<DirectoryRef Id="MAIN_INSTALLLOCATION">
      <Component Id="CMP_config_system" Guid="a430710e-a95b-48d7-acbe-3bf4e6b2c8fc">
        <File Id="FILE_config_system" KeyPath="yes" Source="config_system.ini"/>
      </Component>
</DirectoryRef>

たとえば、C++ でコーディングされたカスタム アクション (疑問符を参照)

UINT __stdcall entryPoint(MSIHANDLE hInstall)
{
   //...
   LPWSTR filePath = NULL;
   hr = WcaGetProperty(???, &filePath);
   //...
}

このようにして、さまざまなことに基づいてそのファイルを開いて編集できますか?

@NC1 によって公開されたのと同じメソッドを編集しますが、WiX API を使用します

// ...
const std::wstring APPDATA_DIR     = L"AppDataDir";
const std::wstring CONFIG_SYSTEM   = L"config_system.ini";

LPWSTR path = NULL;
hr = WcaGetProperty(APPDATA_DIR.c_str(), &path);
ExitOnFailure(hr, "Failed to get Path");

config_system_path = std::wstring(path) + CONFIG_SYSTEM;
//...
4

1 に答える 1

1

これが私のやり方です。カスタム アクションはファイルのインストール後にスケジュールされるため、インストール先のディレクトリを取得し、編集したいファイル (テキスト ファイル) を追加します。これが唯一の方法かどうかはわかりませんが、私にとってはうまくいきます。

HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
char szLocation[MAX_PATH];
LPWSTR szInstallLocation = NULL;
CString lpszString;

hr = WcaInitialize(hInstall, "NAMEOFCUSTOMACTION");
ExitOnFailure(hr, "Failed to initialize");

WcaLog(LOGMSG_STANDARD, "Initialized.");

hr = WcaGetProperty(L"MAIN_INSTALLLOCATION",&szInstallLocation);
ExitOnFailure(hr, "failed to get install location");

wcstombs(szLocation, szInstallLocation, 260);
strcat(szLocation, "\config_system.ini");

どこszLocationにフルパスがありますか。お役に立てれば

于 2012-10-24T08:35:16.733 に答える