{"id":488,"date":"2019-05-30T14:57:56","date_gmt":"2019-05-30T05:57:56","guid":{"rendered":"http:\/\/csharp.ihavenomoney.co.kr\/?p=488"},"modified":"2020-01-02T13:59:19","modified_gmt":"2020-01-02T04:59:19","slug":"488","status":"publish","type":"post","link":"https:\/\/csharp.ihavenomoney.co.kr\/?p=488","title":{"rendered":"InstallShield  setup \ud30c\uc77c \ub9cc\ub4e4\uae30"},"content":{"rendered":"<pre class=\"lang:vim decode:true\">\/\/===========================================================================\r\n\/\/\u25cf \uc124\uce58\uac00 \ub41c\uc801\uc774 \uc5c6\uac70\ub098 Uninstall\ub418\uc5b4 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c \uc2e4\ud589 \ud560 \ub54c flow\r\n\/\/ OnFirstUIBefore  ==&gt;  OnMoveData  ==&gt;  OnFirstUIAfter\r\n\/\/\r\n\/\/\u25cf Uninstall \uc2dc flow \r\n\/\/OnMaintUIBefore ==&gt; OnMoveData ==&gt; OnMaintUIAfter\r\n\/\/\r\n\/\/\u25cf \uc124\uce58\uac00 \ub418\uc5b4 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c Update(==Repair) \uc2dc flow\r\n\/\/OnUpdateUIBefore  ==&gt; OnMoveData  ==&gt; OnUpdateUIAfter\r\n\/\/===========================================================================<\/pre>\n<p><strong>\/\/\u25cf \uc124\uce58\uac00 \ub41c\uc801\uc774 \uc5c6\uac70\ub098 Uninstall\ub418\uc5b4 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c \uc2e4\ud589 \ud560 \ub54c flow<\/strong><br \/>\n<strong>\/\/ OnFirstUIBefore ==&gt; OnMoveData ==&gt; OnFirstUIAfter<\/strong><\/p>\n<pre class=\"lang:vb decode:true \">\/\/ Included header files ----------------------------------------------------\r\n#include \"ifx.h\"\r\n\r\n\/\/---------------------------------------------------------------------------                                                                        \r\n\/\/ OnFirstUIBefore\r\n\/\/\r\n\/\/ First Install UI Sequence - Before Move Data\r\n\/\/\r\n\/\/ The OnFirstUIBefore event is called by OnShowUI when the setup is\r\n\/\/ running in first install mode. By default this event displays UI allowing\r\n\/\/ the end user to specify installation parameters.\r\n\/\/\r\n\/\/ Note: This event will not be called automatically in a\r\n\/\/ program...endprogram style setup.\r\n\/\/---------------------------------------------------------------------------\r\nfunction OnFirstUIBefore()\r\n    number  nResult;\r\n    number  nLevel;\r\n    number  nvSize, nSetupType;\r\n    number  nId;\r\n    string  szTitle, szMsg;\r\n    string  szOpt1, szOpt2, szLicenseFile;\r\n    string  szName, szCompany;\r\n    string  szTargetPath;\r\n    string  svDir;\r\n    string  szFeatures, szTargetdir;\t\r\n    string  szId;\r\n    BOOL    bLicenseAccepted;\t\r\nbegin\t\r\n   \r\n    nSetupType = COMPLETE;\t\r\n\t         \r\n\tif ( ALLUSERS ) then\r\n\t\tTARGETDIR = PROGRAMFILES ^ IFX_COMPANY_NAME ^ IFX_PRODUCT_NAME;\t\t\r\n    else\r\n\t\tTARGETDIR = FOLDER_APPDATA ^ IFX_COMPANY_NAME ^ IFX_PRODUCT_NAME;\r\n    endif;\r\n\r\n\t\/\/ Customize the default TARGETDIR for multi-instance application.\r\n\t\/\/ TODO: If you want something different customize the code below.\t\r\n\t\/*if( MAINT_OPTION = MAINT_OPTION_MULTI_INSTANCE  &amp;&amp; MULTI_INSTANCE_COUNT &gt; 0) then\r\n\r\n\t\t\/\/ Start with the current multi-instance count plus one.\r\n\t\tnId = MULTI_INSTANCE_COUNT + 1;\r\n\r\n\t\t\/\/ Find a unique TARGETDIR.\r\n\t\twhile( ExistsDir( TARGETDIR ) = EXISTS )\r\n\t\t\t\r\n\t\t\t\/\/ Convert to string.\r\n\t\t\tNumToStr( szId, nId );\r\n\t\t\t\r\n\t\t\t\/\/ Update IFX_MULTI_INSTANCE_SUFFIX\r\n\t\t\tIFX_MULTI_INSTANCE_SUFFIX = \"_\" + szId;\r\n\t\t\r\n\t\t\t\/\/ Update TARGETDIR\r\n\t\t\tTARGETDIR = TARGETDIR + IFX_MULTI_INSTANCE_SUFFIX;\r\n\t\t\t\r\n\t\t\t\/\/ Update nId\r\n\t\t\tnId = nId + 1;\r\n\r\n\t\tendwhile;\r\n\r\n\tendif;*\/\r\n\r\n    svDir = TARGETDIR;\r\n    szName = \"\";\r\n    szCompany = \"\";\r\n    bLicenseAccepted = FALSE;<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_sdWelcom.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-491 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_sdWelcom.png\" alt=\"\" width=\"815\" height=\"488\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_sdWelcom.png 815w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_sdWelcom-300x180.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_sdWelcom-768x460.png 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/a><\/p>\n<pre class=\"lang:vb decode:true\">\/\/ Beginning of UI Sequence\r\nDlg_Start:\r\n    nResult = 0;\r\n\r\nDlg_SdWelcome:\r\n    szTitle = \"\uc124\uce58 \ud558\uae30 \";\r\n    szMsg = \"\uba54\uc2dc\uc9c0 \uc785\ub2c8\ub2e4.\";\r\n    \/\/{{IS_SCRIPT_TAG(Dlg_SdWelcome)\r\n    nResult = SdWelcome( szTitle, szMsg );\r\n    \/\/}}IS_SCRIPT_TAG(Dlg_SdWelcome)\r\n    if (nResult = BACK) goto Dlg_Start;<\/pre>\n<p><a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdRegisterUser.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-494 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdRegisterUser.png\" alt=\"\" width=\"814\" height=\"489\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdRegisterUser.png 814w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdRegisterUser-300x180.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdRegisterUser-768x461.png 768w\" sizes=\"auto, (max-width: 814px) 100vw, 814px\" \/><\/a><\/p>\n<pre class=\"lang:vb decode:true \">Dlg_SdRegisterUser:\r\n    szMsg = \"\uc0ac\uc6a9\uc790 \ub4f1\ub85d\";\r\n    szTitle = \"\uc0ac\uc6a9\uc790 \ub4f1\ub85d \ud558\uc138\uc694\";\r\n    \/\/{{IS_SCRIPT_TAG(Dlg_SdRegisterUser)\t\r\n    nResult = SdRegisterUser( szTitle, szMsg, szName, szCompany );\r\n    \/\/}}IS_SCRIPT_TAG(Dlg_SdRegisterUser)\r\n    \/\/if (nResult = BACK) goto Dlg_SdLicense2;\r\n    if (nResult = BACK) goto Dlg_SdWelcome;<\/pre>\n<p><a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SetupType2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-503 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SetupType2.png\" alt=\"\" width=\"813\" height=\"487\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SetupType2.png 813w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SetupType2-300x180.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SetupType2-768x460.png 768w\" sizes=\"auto, (max-width: 813px) 100vw, 813px\" \/><\/a><\/p>\n<pre class=\"lang:vb decode:true \">Dlg_SetupType2:   \r\n    szTitle = \"\uc0ac\uc6a9\uc790 \uc815\uc758 \uc124\uce58 Dlg_SetupType2\";\r\n    szMsg = \"\uc0ac\uc6a9\uc790 \uc815\uc758 \uc124\uce58 Dlg_SetupType2\";\r\n    \/\/{{IS_SCRIPT_TAG(Dlg_SetupType2)\t\r\n    nResult = SetupType2( szTitle, szMsg, \"\", nSetupType, 0 );\r\n    \/\/}}IS_SCRIPT_TAG(Dlg_SetupType2)\r\n    if (nResult = BACK) then\r\n        goto Dlg_SdRegisterUser;\r\n    else\r\n        nSetupType = nResult;\r\n        if (nSetupType != CUSTOM) then\r\n            szTargetPath = TARGETDIR;\r\n            nvSize = 0;\r\n            FeatureCompareSizeRequired( MEDIA, szTargetPath, nvSize );\r\n            if (nvSize != 0) then      \r\n                MessageBox( szSdStr_NotEnoughSpace, WARNING );\r\n                goto Dlg_SetupType2;\r\n            endif;\r\n        endif;   \r\n    endif;<\/pre>\n<p><a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdFeatureTree.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-505 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdFeatureTree.png\" alt=\"\" width=\"811\" height=\"479\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdFeatureTree.png 811w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdFeatureTree-300x177.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_SdFeatureTree-768x454.png 768w\" sizes=\"auto, (max-width: 811px) 100vw, 811px\" \/><\/a><\/p>\n<pre class=\"lang:vb decode:true \">Dlg_SdFeatureTree: \r\n    if ((nResult = BACK) &amp;&amp; (nSetupType != CUSTOM)) goto Dlg_SdAskDestPath2;\r\n    szTitle = \"\uc0ac\uc6a9\uc790 \uc124\uce58 Dlg_SdFeatureTree\";\r\n    szMsg = \"\uc0ac\uc6a9\uc790 \uc124\uce58 Dlg_SdFeatureTree\";\r\n    szTargetdir = TARGETDIR;\r\n    szFeatures = \"\";\r\n    nLevel = 2;\r\n    if (nSetupType = CUSTOM) then\r\n        \/\/{{IS_SCRIPT_TAG(Dlg_SdFeatureTree)\t\r\n        nResult = SdFeatureTree( szTitle, szMsg, szTargetdir, szFeatures, nLevel );\r\n        \/\/}}IS_SCRIPT_TAG(Dlg_SdFeatureTree)\r\n        if (nResult = BACK) goto Dlg_SdAskDestPath2;  \r\n    endif;<\/pre>\n<p><a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-508 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01.png\" alt=\"\" width=\"815\" height=\"489\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01.png 815w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01-300x180.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01-768x461.png 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/a><\/p>\n<pre class=\"lang:vb decode:true\">Dlg_ObjDialogs:\r\n    nResult = ShowObjWizardPages( nResult );\r\n    if (nResult = BACK) goto Dlg_SdFeatureTree;\r\n    \r\nDlg_SdStartCopy2:\r\n    szTitle = \"Dlg_SdStartCopy2\";\r\n    szMsg = \"Dlg_SdStartCopy2\";\r\n    \/\/{{IS_SCRIPT_TAG(Dlg_SdStartCopy2)\t\r\n    nResult = SdStartCopy2( szTitle, szMsg );\t\r\n    \/\/}}IS_SCRIPT_TAG(Dlg_SdStartCopy2)\r\n    if (nResult = BACK) goto Dlg_ObjDialogs;\r\n \r\n    return 0;<\/pre>\n<p><strong>\/\/\u25cf Uninstall \uc2dc flow <\/strong><br \/>\n<strong>\/\/OnMaintUIBefore ==&gt; OnMoveData ==&gt; OnMaintUIAfter<br \/>\n<\/strong><\/p>\n<p><a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-519 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove.png\" alt=\"\" width=\"814\" height=\"486\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove.png 814w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove-300x179.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove-768x459.png 768w\" sizes=\"auto, (max-width: 814px) 100vw, 814px\" \/><\/a><br \/>\n<a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_all.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-520 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_all.png\" alt=\"\" width=\"815\" height=\"487\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_all.png 815w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_all-300x179.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_all-768x459.png 768w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/a><br \/>\n<a href=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_compl.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-521 size-full\" src=\"http:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_compl.png\" alt=\"\" width=\"816\" height=\"487\" srcset=\"https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_compl.png 816w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_compl-300x179.png 300w, https:\/\/csharp.ihavenomoney.co.kr\/wp-content\/uploads\/2019\/05\/Dlg_ScriptTest01_remove_compl-768x458.png 768w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a><\/p>\n<pre class=\"lang:vb decode:true \">\/\/---------------------------------------------------------------------------\r\n\/\/ OnMaintUIBefore\r\n\/\/\r\n\/\/ Maintenance UI Sequence - Before Move Data\r\n\/\/\r\n\/\/ The OnMaintUIBefore event is called by OnShowUI when the setup is\r\n\/\/ running in maintenance mode. By default this event displays UI that\r\n\/\/ allows the end user to add or remove features, repair currently\r\n\/\/ installed features or uninstall the application.\r\n\/\/\r\n\/\/ Note: This event will not be called automatically in a\r\n\/\/ program...endprogram style setup.\r\n\/\/---------------------------------------------------------------------------\r\nfunction OnMaintUIBefore()\r\n    number\tnResult, nType, nMediaFlags;\r\n    string\tszTitle, szMsg, szIgnore;\r\nbegin\r\n\t\r\n\t\/\/ nType defaults to MODIFY.\r\n\tnType = MODIFY;\r\n\r\n\/\/ Beginning of UI Sequence\r\nDlg_Start:\r\n\r\n\t\/\/ Show Standard Maintenance Dialog\r\n\tDisable( BACKBUTTON );\r\n\tnType = SdWelcomeMaint( szTitle, szMsg, nType );\r\n\tEnable( BACKBUTTON );\r\n    nResult = NEXT;\r\n\r\n\t\/\/ Show Uninstall Confirmation Dialog\r\n    if ( nType = REMOVEALL ) then\r\n\t\tnResult = MessageBox( SdLoadString( IFX_MAINTUI_MSG ), MB_YESNO );\r\n\t\tif (nResult != IDYES ) then\r\n\t\t\tgoto Dlg_Start;\r\n\t\tendif;\r\n\tendif;\r\n\r\nDlg_SdFeatureTree:\r\n\tif ( nType = MODIFY ) then\r\n\t\tszTitle = \"\";\r\n\t\tszMsg = SdLoadString( SD_STR_COMPONENT_MAINT_MSG );\r\n\t\tnResult = SdFeatureTree( szTitle, szMsg, TARGETDIR, \"\", -1 );\r\n\t\tif ( nResult = BACK ) goto Dlg_Start;\r\n    endif;\r\n\r\nDlg_ObjDialogs:\r\n    nResult = ShowObjWizardPages( nResult );\r\n    if ( ( nResult = BACK ) &amp;&amp; ( nType != MODIFY ) ) goto Dlg_Start;\r\n    if ( ( nResult = BACK ) &amp;&amp; ( nType = MODIFY ) ) goto Dlg_SdFeatureTree;\r\n\r\n\tswitch(nType)\r\n\r\n        case REMOVEALL:\r\n\t\t\t\t\t\t\r\n\t\t\t\/\/ Ensure that all previously installed features are removed\r\n\t\t\t\/\/ for media that supports updating.\r\n\t\t\tMediaGetData( MEDIA, MEDIA_FIELD_MEDIA_FLAGS, nMediaFlags, szIgnore );\r\n\t\t\t\r\n\t\t\tif( nMediaFlags &amp; MEDIA_FLAG_UPDATEMODE_SUPPORTED ) then\r\n\t\t\t\tFeatureRemoveAllInMediaAndLog();\r\n\t\t\telse\r\n\t\t\t\tFeatureRemoveAllInMedia();\r\n\t\t\tendif;\r\n\r\n        case REPAIR:\r\n\t\t\t\t\r\n\t\t\t\/\/ Changed for DevStudio 9, Disk1 files are now always updated when installed\r\n\t\t\t\/\/ so when running from ADDREMOVE we need to prevent these files from being\r\n\t\t\t\/\/ updated since this will result in files being updated that are locked by the setup.\r\n\t\t\t\/\/ Updating these files when running from ADDREMOVE should not be needed since updates\r\n\t\t\t\/\/ are not run directly from Add\/Remove.\r\n            if( ADDREMOVE ) then\r\n                \/\/ Reinstall all previously installed features, except\r\n                \/\/ disk1 features.\r\n                FeatureUpdate( \"\" );\r\n            else\r\n                \/\/ Reinstall all previously installed features.\r\n                FeatureReinstall();\r\n            endif;\r\n\r\n    endswitch;\r\n \r\nend;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\/\/=========================================================================== \/\/\u25cf \uc124\uce58\uac00 \ub41c\uc801\uc774 \uc5c6\uac70\ub098 Uninstall\ub418\uc5b4 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c \uc2e4\ud589 \ud560 \ub54c flow \/\/ OnFirstUIBefore ==&gt; OnMoveData ==&gt; OnFirstUIAfter \/\/ \/\/\u25cf Uninstall \uc2dc flow \/\/OnMaintUIBefore ==&gt; OnMoveData ==&gt; OnMaintUIAfter \/\/ \/\/\u25cf \uc124\uce58\uac00 \ub418\uc5b4 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c Update(==Repair) \uc2dc flow \/\/OnUpdateUIBefore ==&gt; OnMoveData ==&gt; OnUpdateUIAfter \/\/=========================================================================== \/\/\u25cf \uc124\uce58\uac00 \ub41c\uc801\uc774 \uc5c6\uac70\ub098 Uninstall\ub418\uc5b4 \uc788\ub294 \uc0c1\ud0dc\uc5d0\uc11c \uc2e4\ud589 \ud560 \ub54c flow \/\/\u2026 <span class=\"read-more\"><a href=\"https:\/\/csharp.ihavenomoney.co.kr\/?p=488\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[104],"tags":[],"class_list":["post-488","post","type-post","status-publish","format-standard","hentry","category-setup"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/488","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=488"}],"version-history":[{"count":13,"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/488\/revisions"}],"predecessor-version":[{"id":724,"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/488\/revisions\/724"}],"wp:attachment":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/csharp.ihavenomoney.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}