如何通过此 ISPP 宏仅对一个文件使用 signonce?
How to use signonce with just one file with this ISPP macro?
我不确定我是否做对了:
; We use the preprocessor to compare the DLL versions.
; This results in a smaller setup executable.
; See:
#pragma parseroption -p-
#define FileEntry(Source, DestPath) \
"Source: \"" + Source + "\"; DestDir: \"" + DestPath + "\"; Flags: ignoreversion\n"
#define ProcessFile(RootPath, Path, AlternativePath, DestPath, FindResult, FindHandle) \
FindResult ? \
Local[0] = FindGetFileName(FindHandle), \
Local[1] = AddBackslash(Path) + Local[0], \
Local[2] = AddBackslash(AlternativePath) + Local[0], \
Local[3] = AddBackslash(RootPath) + Local[1], \
Local[4] = AddBackslash(RootPath) + Local[2], \
Local[5] = \
FileExists(Local[4]) && \
(GetFileVersion (Local[3]) == GetFileVersion (Local[4])), \
FileEntry((Local[5] ? Local[2] : Local[1]), DestPath) + \
ProcessFile(RootPath, Path, AlternativePath, DestPath, \
FindNext(FindHandle), FindHandle) \
: ""
#define ProcessFolderWithAlternativeSource(RootPath, Path, AlternativePath, DestPath) \
Local[0] = FindFirst(AddBackslash(AddBackslash(RootPath) + Path) + "*.dll", 0), \
ProcessFile(RootPath, Path, AlternativePath, DestPath, Local[0], Local[0])
#pragma parseroption -p+
#emit ProcessFolderWithAlternativeSource( \
SetupSetting("SourceDir"), "OutlookCalIFConsole", ".", "{app}\OutlookCalIFConsole")
Source: "OutlookCalIFConsole\OutlookCalIFConsole.exe"; DestDir: "{app}\OutlookCalIFConsole"; Flags: ignoreversion sign
Source: "OutlookCalIFConsole\OutlookCalIFConsole.exe.config"; DestDir: "{app}\OutlookCalIFConsole"; Flags: ignoreversion
; MSATools GMail Library
#emit ProcessFolderWithAlternativeSource( \
SetupSetting("SourceDir"), "MSAToolsGMailClassLibrary", ".", "{app}\MSAToolsGMailClassLibrary")
新代码在这里:
; MSATools GMail Library
#emit ProcessFolderWithAlternativeSource( \
SetupSetting("SourceDir"), "MSAToolsGMailClassLibrary", ".", "{app}\MSAToolsGMailClassLibrary")
我不知道我是否需要 parseoption
电话?
另外,这个文件有一个问题:
MSAToolsGMailClassLibrary.dll
还需要signonce
标志。但是 MSAToolsGMailClassLibrary
文件夹中的所有其他 dll 文件都没有。
我们如何做到这一点?
相应地修改 FileEntry
宏:
#define FileEntry(Source, DestPath) \
"Source: \"" + Source + "\"; DestDir: \"" + DestPath + "\"; Flags: ignoreversion " + \
(SameText(ExtractFileName(Source), "MSAToolsGMailClassLibrary.dll") ? "signonce" : "") + \
"\n"
(未经测试)
我不确定我是否做对了:
; We use the preprocessor to compare the DLL versions.
; This results in a smaller setup executable.
; See:
#pragma parseroption -p-
#define FileEntry(Source, DestPath) \
"Source: \"" + Source + "\"; DestDir: \"" + DestPath + "\"; Flags: ignoreversion\n"
#define ProcessFile(RootPath, Path, AlternativePath, DestPath, FindResult, FindHandle) \
FindResult ? \
Local[0] = FindGetFileName(FindHandle), \
Local[1] = AddBackslash(Path) + Local[0], \
Local[2] = AddBackslash(AlternativePath) + Local[0], \
Local[3] = AddBackslash(RootPath) + Local[1], \
Local[4] = AddBackslash(RootPath) + Local[2], \
Local[5] = \
FileExists(Local[4]) && \
(GetFileVersion (Local[3]) == GetFileVersion (Local[4])), \
FileEntry((Local[5] ? Local[2] : Local[1]), DestPath) + \
ProcessFile(RootPath, Path, AlternativePath, DestPath, \
FindNext(FindHandle), FindHandle) \
: ""
#define ProcessFolderWithAlternativeSource(RootPath, Path, AlternativePath, DestPath) \
Local[0] = FindFirst(AddBackslash(AddBackslash(RootPath) + Path) + "*.dll", 0), \
ProcessFile(RootPath, Path, AlternativePath, DestPath, Local[0], Local[0])
#pragma parseroption -p+
#emit ProcessFolderWithAlternativeSource( \
SetupSetting("SourceDir"), "OutlookCalIFConsole", ".", "{app}\OutlookCalIFConsole")
Source: "OutlookCalIFConsole\OutlookCalIFConsole.exe"; DestDir: "{app}\OutlookCalIFConsole"; Flags: ignoreversion sign
Source: "OutlookCalIFConsole\OutlookCalIFConsole.exe.config"; DestDir: "{app}\OutlookCalIFConsole"; Flags: ignoreversion
; MSATools GMail Library
#emit ProcessFolderWithAlternativeSource( \
SetupSetting("SourceDir"), "MSAToolsGMailClassLibrary", ".", "{app}\MSAToolsGMailClassLibrary")
新代码在这里:
; MSATools GMail Library
#emit ProcessFolderWithAlternativeSource( \
SetupSetting("SourceDir"), "MSAToolsGMailClassLibrary", ".", "{app}\MSAToolsGMailClassLibrary")
我不知道我是否需要 parseoption
电话?
另外,这个文件有一个问题:
MSAToolsGMailClassLibrary.dll
还需要signonce
标志。但是 MSAToolsGMailClassLibrary
文件夹中的所有其他 dll 文件都没有。
我们如何做到这一点?
相应地修改 FileEntry
宏:
#define FileEntry(Source, DestPath) \
"Source: \"" + Source + "\"; DestDir: \"" + DestPath + "\"; Flags: ignoreversion " + \
(SameText(ExtractFileName(Source), "MSAToolsGMailClassLibrary.dll") ? "signonce" : "") + \
"\n"
(未经测试)